类继承关系的语法形式:
class 派生类名 : 基类名表
{数据成员和数据函数声明};
基类名表构成:
访问控制,基类名1;访问控制,基类名2;……;访问控制,基类名n;
派生类生成过程:
a) 吸收积累成员:派生类继承了基类的除了构造函数和析构函数以外的全部数据成员和函数成员。 ——代码重用过程
b) 改造积累成员: 对基类成员的访问控制进行改造。
定义与基类同名的成员。即同名覆盖
c) 添加派生类新成员:新数据成员/函数成员 ——对原代码进行扩充的过程
派生类对基类成员的使用与继承访问控制和基类中成员性质有关。
重名成员
l 派生类定义了与基类同名的成员,在派生类中访问同名成员时屏蔽了基类的同名成员。
l 在派生类中使用基类的同名会成员,显式地使用类名限定符:类名::成员。
l 基类成员的作用延伸到所有派生类。
l 派生类的重名成员屏蔽基类地同名成员。
派生类中访问静态成员
u 基类定义的静态成员被所有派生类共享。
u 根据静态成员自身的访问特性和派生类的继承方式,在类层次体型中具有不同的访问性质。
u 派生类中访问静态成员,用显式说明:类名::成员,或通过对象访问:对象名,成员。
基类的初始化
n 建立一个类层次后,通常创建某个派生类的对象,包括使用基类的数据和函数。
n C++提供一种机制,在创建派生类对象时用指定参数调用基类的构造函数来初始化派生类继承基类的数据。
n 派生类构造函数声明:派生类构造函数(变元表):基类(变元表),对象成员1(变元表)……对象成员n(变元表)。
n 构造函数执行顺序:基类→对象成员→派生类。
多继承
² 定义:具有两个或两个以上基类的派生类与定义单继承类似。
² 在多个基类及继承方式之间用逗号分隔。
l class 派生类名:继承方式基类名1,……,继承方式基类名n
l {派生类新定义的成员}
² 注意:
n 冒号之后的基类表,每一个基类名前都有继承方式。
n 若缺省,系统默认为私有继承。
n 派生类与每个基类之间的关系可以认为时一个单继承。
n 多继承也可认为是单继承的扩展。
² 多继承的构造函数:
n 派生类名(点参数表):基类名1(参数表1),……,基类名n(参数表n)
n {派生类新增成员的初始化语句};
n 多继承构造函数执行顺序:基类→对象成员→派生类。
² 多继承的析构函数
n 无返还值,无参数。
n 功能与派生类中对新增的有关成员进行必要的清理工作。