《C++常见问题及解答》
一、类
1. 常数据成员的初始化只能在构造函数的初始化列表中进行
2. 静态数据成员不可以在类内初始化
3. 创建一个对象时的构造函数的调用次序:对象成员的构造函数、对象自身的构造函数
4. 创建一个派生类对象时的构造函数的调用次序:基类的构造函数、派生类对象成员的构造函数、派生类构造函数
5. class默认派生类是以私有继承方式继承基类
6. 基类的私有成员不可以被继承(无论哪种继承方式),故在派生类中无法访问
7. 公有派生类继承了基类中除构造函数、析构函数以外的所有非私有成员,且访问权限也完全相同
7. 派生类无法直接访问基类的私有成员,只能通过公有成员函数来间接访问
8. 基类构造函数的调用通过初始化列表来完成。
9. 派生类只需负责直接基类构造函数的调用。若直接基类构造函数不需要提供参数,则无需在初始化列表中列出(此时会自动调用基类构造函数)
10. 直接基类构造函数、对象成员、常成员和引用成员的初始化只能在构造函数的初始化列表中进行,普通数据成员的初始化也可以放在这里进行
11. 派生类中定义了和基类成员同名的新成员时,该派生类对象将包含这两个成员,只不过派生类对象和派生类内部成员函数访问的都是新成员
12. 派生类的多个直接基类中有同名成员时,该派生类对象将包含这些同名成员,当需要访问这些同名成员时,在成员前指明基类名即可
13. 虚基类的构造函数至多被调用一次,所有层派生类均需调用虚基类构造函数,只有最后一层派生类对虚基类构造函数的调用发挥作用
14.创建一个继承自虚基类的派生类对象时的构造函数的调用次序:所有虚基类的构造函数、所有直接基类的构造函数、所有对象成员的构造函数、派生类构造函数
15. 多态性指一种行为对应着多种不同的实现,根据C++程序实现多态的不同阶段,多态的实现分为静态联编和动态联编
16. 静态联编是在程序编译阶段就能实现的多态性,也称编译时的多态性;动态联编是在程序执行阶段实现的多态性,也称运行时的多态性
17. 动态多态性:基于虚函数实现,基类与派生类存在的同名函数,且该同名函数的原型在基类和派生类中完全一致,故在编译时无法确定调用的是哪一个成员函数
18. 函数重载:要求形式参数在个数、类型、顺序的一个或多个方面有所区别
19. 不可以重载的运算符:. .* :: ?: sizeof
20. 运算符重载不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型
21. 运算符重载的两种方法:用成员函数重载、用友元函数重载
22. 规定使用成员函数重载的运算符:= () [] -> 建议重载为成员函数的运算符:单目运算符、复合赋值运算符
23.
二、引用