继承和派生概述:
-
继承和派生是同一个过程从不同角的度看
-
保持已有类的特性而构造新类的过程称为继承。
-
在已有类的基础上新增自己的特性而产生新类的过程称为派生。
-
-
被继承的已有类称为基类(或父类)。
-
派生出的新类称为派生类(或子类)。
-
直接参与派生出某类的基类称为直接基类。
-
基类的基类甚至更高层的基类称为间接基类。
派生的目的
-
当新的问题出现,原有程序无法解决(或不能完全解决)时,需要对原有程序进行改造。
派生类的构成:
-
吸收基类成员
-
改造基类成员
-
添加新的成员
吸收基类成员:
-
默认情况下派生类包含了全部基类中除构造和析构函数之外的所有成员。
-
c++11规定可以用using语句继承基类构造函数。
改造基类成员:
-
如果派生类声明一个和某基类成员同名的新成员,派生的新成员就隐藏或覆盖了外层同名成员。
添加新的成员:
-
派生类增加新成员使派生类在功能上有所发展。
继承方式
不同继承方式的影响主要体现在:
-
派生类成员对基类成员的访问权限;
-
通过派生类对象对基类成员的访问权限。
三种继承方式:
-
公有继承
-
私有继承
-
保护继承
公有继承(public):
-
继承的访问控制
-
基类的public和protected成员:访问属性在派生类中保持不变;
-
基类的private成员:不可直接访问。
-
-
访问权限
-
派生类中的成员函数:可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员;
-
通过派生类的对象:只能访问public成员。
-
举例:
定义一个点类(Point)
定义一个矩形类(Rectangle)
私有继承(private)
-
继承的访问控制:
-
基类的public和protected成员:都以private身份出现在派生类中;
-
基类的private成员:不可直接访问。
-
-
访问权限:
-
派生类中的成员函数:可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员;
-
通过派生类的对象:不能直接访问从基类继承的任何成员。
-
举例
保护继承(protected)
-
继承的访问控制
-
基类的public和protected成员:都以protected身份出现在派生类中
-
基类的private成员:不可直接访问。
-
-
访问权限
-
派生类中的成员函数:可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员;
-
通过派生类的对象:不能直接访问从基类继承的任何成员。
-
protected成员的特点与作用
-
对建立所在类对象的模块来说,它与private成员的性质相同。
-
对于其派生类来说,它与public成员的性质相同。
-
既实现了数据隐藏,有方便继承,实现代码重用。
多继承举例
//公有继承 对象访问 成员访问
public --> public Y Y
protected --> protected N Y
private --> private N N
//保护继承 对象访问 成员访问
public --> protected N Y
protected --> protected N Y
private --> protected N N
//私有继承 对象访问 成员访问
public --> private N Y
protected --> private N Y
private --> private N N