派生类继承方式
- 格式:ppt
- 大小:182.00 KB
- 文档页数:23


C++继承机制继承继承是类与类之间的一种关系定义:“类B继承类A”,或者说“类A派生类B”类B中除了自己定义的成员之外,还自动包括了类A中定义的数据成员与成员函数,这些自动继承下来的成员称为类B的继承成员。
一、继承的语法1、class 派生类名: 基类类名表{public: 公有成员说明列表;protected: 受保护成员说明列表;private: 私有成员说明列表;};其中基类类名表的格式为:access 基类类名1, ……, access 基类类名naccess为继承访问控制符,规定了派生类对基类的继承方式,可为public,private或者protected,继承访问控制符可省略,此时认为为private在protected后定义的是保护段,其中的数据成员或成员函数称为受保护成员:具有公有成员与私有成员的双重角色。
2、一个类的受保护成员,对于其子孙类(派生类)的成员函数来说是公有的,对类本身及后代类之外定义的其他函数则是私有成员。
3、派生类可以重新定义基类的成员函数,覆盖基类的同名函数4.通过类名限定符在派生类中使用基类的同名成员二、继承访问控制规则公有继承(公有派生)、私有继承、保护派生类的对象不仅存放了在派生类中定义的非静态数据成员,而且也存放了从基类中继承下来的非静态数据成员。
二、类型兼容性1.赋值运算的类型兼容性类型的赋值兼容性规则:1) 允许将后代类的对象赋值给祖先类,但反之不成立。
例:BASE obj1;Y1 obj2;obj1 = obj2 ; // 把obj2中基类部分的内容赋给obj1obj2 = obj1 ;但此规则只适用于公有派生,只有公有派生类才能兼容基类类型2) 指向基类对象的指针也可指向公有派生类对象2.参数传递与对象初始化的类型兼容性与赋值运算类型兼容性相同A* p=q;//初始化A*p;P=q; //赋值继承与构造函数、析构函数一、构造函数与析构函数的调用次序1. 构造函数的调用次序在创建一个派生类的对象时先调用其基类的构造函数再调用本类对象成员的构造函数最后才调用本类的构造函数2. 析构函数的调用次序先调用本类的析构函数再调用本类对象成员的析构函数最后才调用其基类的析构函数二、向基类构造函数传递实际参数给基类构造函数传递实际参数是通过向派生类构造函数传递实际参数以及初始化列表来间接实现传递的。
C++讲义-第九章习题一.选择题1.下列对派生类的描述中,错误的是()A.一个派生类可以作为另一个派生类的基类。
B.派生类至少有一个基类。
C.派生类的成员除了它自己的成员之外,还包含了它的基类的成员。
D.派生类中继承的基类成员的访问权限到派生类保持不变。
2.派生类的对象对它的基类成员中,可以访问的是()A.公有继承的公有成员。
B.公有继承的私有成员。
C.公有继承的保护成员。
D.私有继承的公有成员。
3.对基类和派生类的关系描述中,错误的是()A.派生类是基类的具体化。
B.派生类是基类的子集。
C.派生类是基类定义的延续。
D.派生类是基类的组合。
4.派生类的构造函数的成员初始化列表中,不能包含的是()A.基类的构造函数。
B.派生类中子对象的初始化。
C.基类的子对象初始化。
D.派生类中一般数据成员的初始化。
5.关于子类型的描述中,错误的是()A.子类型就是指派生类是基类的子类型。
B.一种类型当它至少提供了另一种类型的行为,则这种类型是另一种类型的子类型。
C.在公有继承下,派生类是基类的子类型。
D.子类型关系是不可逆的。
6.关于多继承二义性的描述中,错误的是()A.一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性。
B.解决二义性的常用方法是对成员名进行类名限定。
C.基类和派生类中同时出现的同名函数,也存在二义性问题。
D.一个派生类是从两个基类派生来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,也可能出现二义性。
7.设置虚基类的目的是()A.简化程序B.消除二义性C.提高运行效率D.减少目标代码8.带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化的次数为()A.与虚基类下面的派生类个数有关。
B.多次C.二次D.一次9.C++中的类有两种用法:一种是类的实例化,即生成类的对象,并参与系统的运行;另一种是通过(),派生出新的类。