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