- 局部变量能否和全局变量重名?
- 可以,局部变量会屏蔽全局变量。在使用全局变量时需要使用 ":: "。
- 拷贝构造函数:参数为同类型的对象的常量引用的构造函数
- 函数指针:int (*f)(int,int) = & max;
- 虚函数:在基类中使用关键字 virtual 声明的函数。
- 虚函数依靠虚指针vptr和虚函数表vtable来处理。vptr是一个指针,在类的构造函数中创建生成,并且只能用this指针来访问它,因为它是类的一个成员,并且vptr指向保存虚函数地址的vtable。如果子类没有定义虚函数,那么他会继承父类的虚函数表(子类和父类共用同一张虚函数表)(共用存疑),子类的虚指针会指向父类的虚函数表。如果子类中只重载了一部分虚函数,没有重载的虚函数的地址也会保存在子类独有的虚函数表中,不过其地址与父类的虚函数表中对应函数的地址相同。
- 静态成员函数没有this指针。
- 静态成员不能是虚函数。虚函数在程序运行时,根据实际对象的类型来调用相应的函数。而静态成员函数是不依赖于任何对象的,它不需要通过对象来访问。 静态成员函数没有this指针,所以无法访问vptr. 这就是为何static函数不能为virtual。对于子类中没有重载的虚寒性
- 静态成员不可以访问非静态成员。在类为实例化时,没有具体的对象,也就没有相应的非静态成员存在,
- 静态成员访问非静态成员方法。通过参数传入所在的类的对象。
- const成员函数:函数名前面使用const 表示返回值为const,后面加 const表示函数不可以修改class的成员。后面加 const,传入的this指针为常量指针,不可以通过指针改变其内容。
- 静态成员函数后不用const修饰:静态成员不访问成员变量,后加const修饰无意义。
- 动态多态:(虚函数)对于相关的对象类型,确定它们之间的一个共同功能集,然后在基类中,把这些共同的功能声明为多个公共的虚函数接口。各个子类重写这些虚函数,以完成具体的功能。编译期要执行的具体程序无法确定,要等运行时才能确定。
- 静态多态:模板。编译期执行的程序便被确定。
- 数组作为参数传递给函数或将其赋值给指针时,数组会退化成指针,此时 对其使用
sizeof
将返回指针的大小,而不是数组的大小。 - 字符串char[]的实际长度比其内容长度要+1,因为多一个'\0'。
- 类的声明,会调用默认构造函数。 类指针的声明,不会调用构造函数。
- FILE *fopen(const char *filename, const char *mode);mode:r+:如果文件不存在返回null。从文件头开始写,覆盖的文字最后不加eof,未覆盖的字符保留。w+:当文件不存在则创建文件。从文件头开始写,覆盖的文字最后加eof,原文件将会被清空。
- 方法覆盖:方法的覆盖对返回值的要求是:小于等于父类的返回值。方法的覆盖对访问要求是:大于等于父类的访问权限。