继承:在已有类的基础上创建新类的过程
一个 B 类继承A类,或称从类A派生类B
类 A 称为基类(父类),类B称为派生类(子类)
类继承关系的语法形式
class 派生类名: 基类名表
{
数据成员和成员函数声明
};
访问控制 基类名
基类名表 构成
访问控制 基类名1, 访问控制 基类名2 ,… , 访问控制 基类名n
访问控制表示派生类对基类的继承方式,使用关键字:
public 公有继承
private 私有继承
protected 保护继承
不论种方式继承基类,派生类都不能直接使用基类的私有成员
在C++的继承机制中,派生类吸收基类中除构造函数和析构函数之外的全部成员。
例如:
classFather
{
int a,b;
public:
//成员函数
};
classSon:publicFather
{
int c;
public:
// 成员函数
};
重名成员:
派生类定义了与基类同名的成员,在派生类中访问同名成员时屏蔽(hide)了基类的同名成员
在派生类中使用基类的同名成员,显式地使用类名限定符:
类名:: 成员
派生类中访问静态成员
(1)基类定义的静态成员,将被所有派生类共享(基类和派生类共享基类中的静态成员)(2)根据静态成员自身的访问特性和派生类的继承方式,在类层次体系中具有不同的访问性质 。
(3) 派生类中访问静态成员,用以下形式显式说明:
类名 :: 成员或通过对象访问 对象名.成员
基类初始化:
在创建派生类对象时用指定参数调用基类的构造函数来初始化派生类继承基类的数据
派生类构造函数声明为
派生类构造函数 ( 变元表 ): 基类 ( 变元表 ), 对象成员1(变元表 )
… 对象成员n ( 变元表);
构造函数执行顺序:基类à对象成员à派生类
派生类构造函数和析构函数的定义规则
派生类构造函数和析构函数的使用原则
(1)基类的构造函数和析构函数不能被继承;(2)如果基类没有定义构造函数或有无参的构造函数,派生类也可以不用定义构造函数;
(3)如果基类无无参的构造函数,派生类必须定义构造函数;
(4)如果派生类的基类也是派生类,则每个派生类只负责直接基类的构造;
(5)派生类是否定义析构函数与所属的基类无关
派生类定义:
派生类的数据成员既包括基类的数据成员,也包括派生类新增数据成员。
C++中,派生类构造函数的一般格式为:
派生类::派生类名(参数总表):基类名(参数表)
{
// 派生类新增成员的初始化语句
}
注意:
这是基类有构造函数且含有参数时使用
派生类函数 使用时构造函数使用
基类构造函数()
派生类构造函数()
派生类析构函数~()
基类析构函数~()
多继承
class 派生类名: 访问控制 基类名1, 访问控制 基类名2, … , 访问控制 基类名n
{
数据成员和成员函数声明
};
多继承构造函数
派生类名(参数总表):基类名1(参数表1),基类名2(参数表2),…,基类名n(参数表n)
{
// 派生类新增成员的初始化语句
}
先执行所有基类的构造函数
再执行对象成员的构造函数
最后执行派生类的构造函数
复制兼容规则:
赋值兼容规则中所指的替代包括以下的情况:
a派生类的对象可以赋给基类对象
b派生类的对象可以初始化基类的引用
c派生类的对象的地址可以赋给基类类型的指针
总结
使用继承可以减少代码量,提高效率,大大降低开发难度,减少工作量,用起来非常方便,但是,掌握起来有一定的难度,所以要在以后的学习生活中勤加练习,通过反复练习来总结规律扎实掌握。