10.8 小结

    本章主要讨论了C++面向对象设计中的继承问题。继承的重要性是支持程序代码复用,它能够从已存在的类中派生出新类,继承基类的成员,而且可以通过覆盖基类成员函数,产生新的行为。派生可以从一个基类派生,称为单基继承;也可以从多个基类派生,称为多基继承;派生类也可以再派生出新类,构成多级继承结构。

    本章介绍并引入了一种新的数据成员访问权限protected,对象中的protected成员无法在外部访问,但可以被有血缘关系的类访问。派生有3种方式,各方式的不同在于派生后基类成员在派生类的访问权限不同。

    派生类的构造函数和析构函数与普通类略有不同,必须将对基类的构造函数调用放在初始化表中。多基派生时,各基类构造函数的调用顺序取决于类定义时基类的顺序,同初始化表列出的构造函数的调用顺序无关。

    继承可以在基类的基础上扩展功能,促进代码复用,虽然很有用但继承不是万金油,在类设计时,应具体分析是继承还是组合,关键看对象间的关系是IS-A还是HAS-A。

    为了说明基类对象、指针和派生类对象以及指针的相互转化,引入了“类型适应”的概念,原则上说,派生类适应基类,即应该使用基类对象(或指针)的场合,可以无条件地使用派生类对象(或指针),此外,应用最多的还是基类对象和派生类对象的赋值,以及基类指针和派生类指针的赋值等,在多基继承时,情况会稍复杂些,但只要理解了派生类对象的内存模型,便能很容易掌握转化的规律。