1.三个基本概念:数据抽象,继承和动态绑定。
2.使用基类地引用或指针调用一个虚函数时将发生动态绑定。
3.基类通常定义一个虚析构函数,即使不执行任何操作。
4.基类希望它的派生类有权访问,但是禁止其他用户访问,protected成员。
5.C++新标准允许派生类显式地注明它使用某个成员函数覆盖了它继承的虚函数。override。
6.派生类到基类的隐式转换。
7.首先初始化基类的部分,然后按声明的顺序依次初始化派生类的成员。最好用基类的构造函数来初始化从基类继承来的成员。
8.基类的静态成员,无论多少派生类,对每个静态成员只存在唯一的实例。
9.派生类的声明不可以包含派生列表。
10.类名后跟final,可以防止被继承。
11.基类指针或引用的静态类型和动态类型可能不一样。
12.可以用派生类的对象为一个基类对象初始化或赋值,只有基类部分成员会被拷贝,移动或赋值。
13. 基类某个函数指定为final,之后任何想覆盖该函数的操作都将引发错误。
14.如果虚函数使用默认实参,则基类和派生类最好保持一致,否则使用基类的。
15.回避虚函数机制,作用域运算符。
16.含有纯虚函数的基类是抽象基类,不能创建抽象基类的对象。
17.派生类对基类的受保护成员只能通过其对象来访问。不能通过基类对象来访问。
18.派生类对基类成员的访问和派生访问说明符没什么关系,只和基类中的访问说明符有关。
19.派生访问说明符只影响派生类对象对基类成员的访问权限。
20.只有当派生类公有的继承基类时,才能使用派生类向基类的转换。
21.友元关系不能继承。基类的友元在访问派生类成员时无特殊性。
22. 派生类可以用using来改变个别成员的可访问性。
23. struct默认public继承,class默认private继承。
24. class和private的唯一区别就是默认成员访问说明符和默认派生访问说明符。
25.继承中,派生类的作用域嵌套在其基类的作用域中。编译时进行名字查找。
26.派生类的名字会覆盖基类的名字(同名),可以用作用域符号显式地使用被隐藏地成员。
27.派生类地函数不会重载其基类地函数,即使形参列表不一样,基类成员也会被隐藏。一旦名字找到,编译器就停止查找。名字查找先于参数检验。
28.可以在派生类中使用using来覆盖重载函数。
29.默认情况下,派生类定义拷贝或移动构造函数时,必须在构造函数初始值列表中显式地调用该构造函数。
30.派生类析构函数只负责销毁派生类自己分配地资源。
31.派生类析构函数先执行,然后时基类。
32.一个类只可以继承其直接基类的构造函数,using 语句。但是不可以继承默认、拷贝和移动构造函数。
33.容器只能保存同意类型对象,因此不能直接保存具有继承关系的多种类型对象。
34.可以将一个派生类的指针转换为基类的指针,因此可以在容器里保存基类的指针。
35.最好为基类也定义一个虚析构函数,这样当我们删除一个基类指针,而它实际指向一个派生类对象时,程序也可以正确运行。