继承是面向对象程序设计使代码复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。
三种成员访问限定符:public,protected,private;继承关系则也有三种:public(公有继承),protected(保护继承),private(私有继承)。
如上图所示,三种继承方式下,不同成员在子类中的访问权限。
总结:
1.基类的private成员在派生类中是不能被访问的。如果基类成员不想在类外直接被访问,但需要在派生类中能访问,就定义为protected。
2.public继承是一个接口继承,每个父类可用的成员对子类也可用,因为每个子类对象也都是一个父类对象。
3.不管是哪种继承方式,在派生类内部都可以访问基类的公有成员和保护成员,基类的私有成员存在但是在子类中不可见。
4.使用关键字class时默认的继承方式是private,使用struct时默认的继承方式是public。
5.protected,private继承是一个实现继承,基类的部分成员并非完全成为子类接口的一部分。
继承关系中构造函数的调用顺序
在调用构造函数时,先调用派生类的构造函数,在派生类构造函数初始化列表的位置在调用基类的构造函数,然后派生类的构造函数继续执行。
基类没有缺省构造函数时,派生类必须要在初始化列表中显示的给出基类名和参数列表;基类没有定义构造函数,则派生类也可以不用定义,全部使用缺省构造函数。
继承关系中析构函数的调用过程
先调用派生类析构函数了,调用顺序和成员对象在类中声明的顺序相反,在调用基类析构函数,调用顺序和基类在派生列表中声明顺序相反。
继承体系中的作用域
1.在继承体系中基类和派生类是不同的作用域。
2.子类和父类中有同名成员,子类成员将屏蔽父类对成员的直接访问。
友元与继承
友元关系不能继承,也就是说基类友元不能访问子类私有和保护成员。
静态成员与继承的关系
基类定义了static成员,则整个继承体系里面只有一个这样的成员,无论派生出多少个子类,都只有一个static成员实例。
继承与转换(public继承)
子类对象可以赋值给父类对象;父类对象不能赋值给子类对象;父类的指针或引用可以指向子类对象;子类的指针或引用不能指向父类对象。
单继承,多继承,菱形继承
单继承是一个子类只有一个直接父类时称这个继承为单继承。
多继承是一个子类有两以上直接父类时称为多继承。
菱形继承:
菱形继承对象模型:
D的对象中有两份A成员,菱形继承中存在二义性和数据冗余的问题。
虚拟继承
在继承关系前加virtual关键字,解决菱形继承的二义性和数据冗余的问题,解决二义性在VS下使用的是偏移量。
如下图为单继承中的虚拟继承:
以上就是有关继承相关的知识点,欢迎读阅,欢迎补充。