1)继承机制的目的:代码复用。
2)class Student : public Person // Student 是派生类,Student 是基类,public 是继承方式
便于记忆,其实这9种就是“取交集”。
3)值得一提的是,protected其实是为了继承而出现的,目的是使派生类可以访问而类外不能访问。
4)切片:派生类对象可以赋值给 基类的对象 / 基类的指针 / 基类的引用,即把派生类中父类的那部分切来赋值过去。(意思就是“只多不少”)
5)基类和派生类都有独立的作用域。
6)关于6个默认成员函数:(构造、析构、拷贝构造、赋值重载、取地址重载)
1. 派生类的构造函数必须调用基类的构造函数初始化基类的那一部分成员。如果基类没有默认的构造函数,则必须在派生类构造函数的初始化列表阶段显示调用。
2. 派生类的拷贝构造函数必须调用基类的拷贝构造完成基类的拷贝初始化。
3. 派生类的operator=必须要调用基类的operator=完成基类的复制。
4. 派生类的析构函数会在被调用完成后自动调用基类的析构函数清理基类成员。因为这样才能保证派生类对象先清理派生类成员再清理基类成员的顺序。
5. 派生类对象初始化先调用基类构造再调派生类构造。
6. 派生类对象析构清理先调用派生类析构再调基类的析构。
7)友元关系不能继承
8)多继承:一个子类有两个或以上的直接父类(“一个孩子两个爹”)
9)菱形继承:存在数据冗余和二义性问题
通过“虚拟继承”来解决这个问题,在菱形的左右B、C两个类,继承时加上“virtual”。
虚拟继承的原理:通过B和C的两个指针,指向的一张表。这两个指针叫虚基表指针,这两个表叫虚基表。虚基表中存的偏移量。通过偏移量可以找到下面的A。