[c++进阶]继承

发布于:2024-04-25 ⋅ 阅读:(17) ⋅ 点赞:(0)

目录

        概念:继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保 持原有类特性的基础上进行拓展,产生新的类=》称为派生类。

继承方式:

public继承,protected继承,private继承。

基类和派生类对象赋值转换 

派生类的默认成员函数

 六个默认成员函数:​编辑

继承和静态成员:

继承与友元:


        概念:继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在持原有类特性的基础上进行拓展,产生新的类=》称为派生类。

————————————————————————————————————————

这里想必比较抽象,我们借助图像来理解:       

         一般的定义方式:(下面会以这两个类为例子来解释)

继承方式:

public继承,protected继承,private继承。

 我们总结以下几个规则:

        1.基类的private成员:无论使用什么继承方式,在派生类中都不可见(这里的不可见的意思是:无论在派生类内部还是外部都是无法访问的)。

        2.如果想要基类成员在继承后的派生类内部能够被访问,那么基类成员至少不能是private成员,至于继承方式就没有要求(注意:这是在派生类内部能够访问的条件)。

        3.继承规律:对于基类的private成员,任何继承方式,在派生类中都是不可见的 ; 对于剩下两种类型的基类成员,继承后在派生类中的类型取 【基类时的成员类型和继承方式中较小的那一个】 大小规定:public > protected > private

        4.使用关键字class默认的继承方式private,使用struct默认的继承方式public不过最好显示的写出继承方式。

        5.但是在实际中,大多都采用public继承。很少使用其他两种继承方式,也不提倡,因为这两种继承方式继承下来的成员都只能在派生类内部访问,实际中拓展维护性不强。

基类和派生类对象赋值转换 

*     派生类对象 可以赋值给 基类的对象 / 基类的指针 / 基类的引用 。这里有个形象的说法叫切片或者切割。寓意把派生类中父类那部分切来赋值过去;
*      基类对象不能赋值给派生类对象;

重要的是其中并没隐式的类型转换,而是通过“切片”来实现的 :

派生类的默认成员函数

 六个默认成员函数:

派生类默认成员函数的特点总结:

各司其职:1.派生类中基类部分的成员,要调用基类的构造函数去初始化剩下的派生类自身部分就派生类自己的构造函数去初始化);

        2.派生类的拷贝构造函数必须手动显示调用 基类的拷贝构造函数 去处理基类部分的初始化;否则会出现拷贝构造失效的情况

3.派生类的赋值(operator=)中必须手动调用基类的赋值运算符重载函数来赋值基类部分;

4.派生类的析构函数会在被调用完成后 自动调用 基类的析构函数清理基类成员。因为这样才能保证派生类对象  先清理派生类成员  再清理基类成员的顺序

继承和静态成员:

如果基类定义了static静态成员,则整个继承体系里面只有一个这样的成员。无论派生出多少个类,都只有一个static成员实例

继承与友元:

有缘关系没法被继承:即基类的友元不能访问子类的私有和保护成员。


到这里基本的继承就学完了,后续还会出复杂菱形继承的分析哦~