1.继承和派生的概念
子类继承了父类的特性,但同时又可以派生出新的特性。
2.公有继承、私有继承和保护继承的区别
基类中的 在公有子类中 在保护子类中 在私有子类中
公有成员 公有成员 保护成员 私有成员
保护成员 保护成员 保护成员 私有成员
私有成员 私有成员 私有成员 私有成员
私有继承:防止基类中的公有和保护成员因为继承而发生扩散。
保护继承:防止基类中的公有和保护成员因为继承而发生外部扩散,允许在继承链内部扩散。
3.类成员的访控属性
访控限定符 访控属性 基类 子类 外部 友元
public 公有成员 OK OK OK OK
protected 保护成员 OK OK NO OK
private 私有成员 OK NO NO OK
4.构造函数和析构函数在继承中的执行顺序
(1)任何时候子类的构造函数都会通过基类的构造函数构造子类对象的基类,除非在子类构造函数的初始化表中显示指明其基类部分的初始化方式,否则一律按照无参数方式构造其基类部分。
(2)构造顺序:基类->成员->子类
(3)析构顺序:子类->成员->基类
(4)任何时候子类的析构函数都会通过基类的析构函数析构其基类子对象。
(5)delete一个指向子类对象的基类指针,实际被调用的将是基类的析构函数,而基类的析构函数不会自动调用子类的析构函数,子类中的资源将形成内存泄漏。
(6)基类的构造顺序是按继承时给定的顺序执行,与初始化定义顺序无关。
5.多重继承的概念
从2个或2个以上的基类派生出子类
6.多重继承的两义性---钻石继承
A
/ \
X Y
\ /
Z
为了使多重继承不出现两义性,将公共基类说明为虚基类,说明方式是从公有基类派生出新类时,使用virtual关键字。
class A : virtural public B { }
7.基类与派生类的转换
(1)派生类的指针不能直接指向基类对象。
基类对象通常会小于派生类对象,如果将基类对象的地址赋给指向派生类对象的指针,而派生类对象的指针仍会像操作派生类对象那样操作基类对象,那么就会将一部分不属于基类对象的内存也操作了,这样在使用该指针操作时可能会删除或修改基类对象之外的数据,所以派生类指针不能直接指向基类对象。
(2)虚基类的指针或引用不能转换为派生类的指针或引用。