1. 派生过程
派生类的一般定义语法为:
class 派生类名: 继承方式 基类名1, ...
{
};
1. 吸收基类成员:继承基类中除构造函数和析构函数外的所有非静态成员。
2. 改造基类成员:如果声明了一个和某基类成员同名的新成员(如果是成员函数,则参数表也要相同),派生的新成员就隐藏了外层同名成员。、
3. 添加新的成员
2. 访问控制
当继承方式为公有继承时,基类的公有成员和保护成员的访问属性在派生类中不变,私有成员不可访问。
当继承方式为私有继承时,基类中的公有城园区和保护成员都以私有成员身份出现在派生类中,私有成员不可被访问。
保护继承,基类的公有成员和保护成员都以保护成员的身份出现在派生类中,基类的私有成员不可直接访问。
不管什么继承方式,基类的私有成员都不可被派生类访问。
3. 类型兼容规则
类型兼容规则是指在需要基类对象的任何地方都可以使用公有派生类的对象来替代。
4. 派生类的构造和析构函数
派生类构造函数一般语法形式为:
派生类名::派生类名(参数表):基类名1(基类1初始化参数表), ..., 成员对象名1(成员对象1初始化参数表)
{
}
派生类构造函数执行的一般次序:
(1)调用基类构造函数,顺序按照继承声明顺序
(2)对派生类新增的成员对象初始化,调用顺序按照在类中声明的顺序。
(3)执行派生类的构造函数体中的内容。
析构函数的调用顺序与构造函数相反。
5. 派生类成员的标识与访问
如果派生类中声明了与基类成员函数同名的新函数,即使函数的参数表不同,从基类继承的同名函数的所有重载形式也都会被隐藏。
如果派生类的多个基类拥有同名的成员,同时派生类又新增这样的同名成员,派生类成员将隐藏所有基类的同名成员。
6. 虚基类
将共同基类设置为虚基类,这样从不同路径继承过来的同名数据成员在内存中就只有一个副本,同一个函数名也只有一个映射。
虚基类语法形式:
class 派生类名:virtual 继承方式 基类名
{
}
如果虚基类声明有非默认形式的(即带形参的)构造函数,并且没有声明默认形式的构造函数,在派生类中必须在构造函数的成员初始化列表中列出对虚基类的初始化。