继承

        继承是面向对象程序设计使代码复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。 

        三种成员访问限定符: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下使用的是偏移量。

如下图为单继承中的虚拟继承:

                                 

        以上就是有关继承相关的知识点,欢迎读阅,欢迎补充。

         

        



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值