目录
概念:继承(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成员实例 。
继承与友元:
有缘关系没法被继承:即基类的友元不能访问子类的私有和保护成员。
到这里基本的继承就学完了,后续还会出复杂菱形继承的分析哦~