第十一章 继承与派生 学习笔记

第十一章 继承和派生

 

1.单继承(子类只有有一个父类)&多继承(子类有多个父类)

2.派生类的声明方式

 

class 派生类名 :继承方式 基类名

派生类新增加的成员

};

 

3.继承方式:

Public:(公有)

Private:(私有)

Protect:(保护)

4.派生类的构成:

从基类接收成员:(除构造和析构以外的所有成员)

调整从基类接收的成员:(改变访问属性)

对于新增同名成员函数:

如果参数列表相同:派生类覆盖基类

如果参数列表不同:函数重载

在声明派生类时增加的成员:(对基类的具体化)

5.派生类成员的访问属性

Public: 基类保持原有的访问属性

基类在派生类外可见,可以在类外引用基类公有成员;

Public->public

Private->不可访问

Protect->protect

Private:基类的公有成员不能在基类和派生类外被访问

基类在派生类外不可见

Public->private

Private->不可访问

Protect->private

Protect:不能被类外引用,可以被派生类的成员引用

基类在派生类外不可见,其下一层派生类可访问

Public->protect

Private->不可访问

Protect->protect

不可访问:*派生类成员函数不能直接访问基类私有成员;

6.多级派生的访问属性:只看上一级成员属性确定

7.派生类的构造函数和析构函数

(在执行派生类的构造函数时,调用基类的构造函数)

*一般派生类的构造函数

派生类构造函数名(总参数列表):基类构造函数名(参数表){

派生类新增数据成员初始化;

总参数列表:同时包括基类和派生类的参数(同时包括参数类型

 

*使用初始化列表:

参数表:调用基类构造函数(不加参数类型)

派生类构造函数名(总参数列表):基类构造函数名(参数表),新增数据成员(参数){};

 

*有子对象的派生类的构造函数

派生类构造函数名(总参数列表):基类构造函数名(参数表),子对象名(参数表){

派生类新增数据成员初始化;

 

*多层派生时的构造函数

(先构造基类,再构造子对象,最后构造派生类新增成员)

(不要列出每一层的派生类的构造函数,只需写出其上一层派生类的构造函数即可)

 

*派生构造函数的特殊形式

当不对派生类新增数据成员进行任何特殊初始操作,派生类构造函数的函数体为空。

如果基类没有定义构造函数,或者定义了没有参数的构造函数,那么派生类可以不写基类的构造函数,此时调用默认构造函数

 

析构函数:(先析构派生类新增成员,再析构子对象,最后析构基类)

8.多重继承

*声明多重继承的方法

Class 派生类名 :<继承方式> 基类1名, <继承方式> 基类2名,......

新增成员数据初始化;

 

*多重派生类的构造函数

派生类构造函数名(总参数表) 基类1构造函数(参数表),基类2构造函数(参数表)

派生类新增成员数据初始化语句;

 

*多重函数的二义性

 

9.虚基类(在继承简洁共同记录是只保留一份成员)

*虚基类声明方法

Class A

Class B : virtual <继承方式> A

Class C : virtual <继承方式> A

注意:虚基类并不是在声明基类时声明的,而是在声明派生类,指定继承方式时声明

Class 派生类名 : virtual <继承方式> 基类名

 

*虚基类的初始化(使用初始化列表)

在最后的派生类中不仅要负责对其基类进行初始化,还要负责对虚基类初始化。

 

尽量避免使用多继承

10.基类和派生类的转换

只有公有继承能较好的保留了基类的特征,因此,只有共有派生类才是基类真正的子类型。

只能用子类对象对其基类对象赋值,而不能用基类对象对其子类对象赋值。

11.继承和组合

继承(派生类)是纵向关系,组合(复合类)是横向关系。

posted @ 2017-06-13 14:29  hello_OK  阅读(296)  评论(0编辑  收藏  举报