继承(inheritance)机制
是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构。体现了由简单到复杂的认识过程。
思想:
从现有的类继承属性和行为,然后增加属性和行为定制类以满足我们的实际要求,创建派生类不会英系那个基类的源代码,基类的完整性可以得到保证
由基类派生出派生类的定义的一般形式为
class 派生类名:访问限定符 基类名1《,访问限定符
基类名2,……,访问限定符 基类名n》
{
private:
成员表1;》 //派生类增加或替代的私有成员
public:
成员表2;》 //派生类增加或替代的公有成员
protected:
成员表3;》 //派生类增加或替代的保护成员
};//分号不可少
其中基类1,基类2,……是已声明的类。 在派生类定义的类体中给出的成员称为派生类成员,它们是新增加成员,它们给派生类添加了不同于基类的新的属性和功能。派生类成员也包括取代基类成员的更新成员。
派生类的构造函数的定义形式为:
派生类名::派生类名(参数总表):基类名1(参数表1)《,基类名2(参数表2),……,基类名n(参数表n)》,《成员对象名1(成员对象参数表1),……,成员对象名m(成员对象参数表m)》{
……//派生类新增成员的初始化;
} //所列出的成员对象名全部为新增成员对象的名字
在构造函数的声明中,冒号及冒号以后部分必须略去。
所谓不能继承并不是不能利用,而是把基类的构造函数作为新的构造函数的一部分,或者讲调用基类的构造函数。
冒号后的基类名,成员对象名的次序可以随意,这里的次序与调用次序无关
派生类构造函数各部分的执行次序为:
1.调用基类构造函数,按它们在派生类定义的先后顺序,顺序调用。
2.调用成员对象的构造函数,按它们在类定义中声明的先后顺序,顺序调用。
3.派生类的构造函数体中的操作。
在派生类构造函数中,只要基类不是使用缺省构造函数都要显式给出基类名和参数表。
如果基类没有定义构造函数,则派生类也可以不定义,全部采用系统给定的缺省构造函数。
如果基类定义了带有形参表的构造函数时,派生类就应当定义构造函数。
析构函数各部分执行次序与构造函数相反,首先对派生类新增一般成员析构,然后对新增对象成员析构,最后对基类成员析构。