实验四 继承与派生(学生)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四:继承与派生(2)
一、实验目的和要求
(1)理解单继承与多继承,掌握多继承派生类的声明方式。
(2)掌握多继承派生类构造函数的定义的一般形式。
(3)掌握多继承构造函数与析构函数的执行顺序。
(4)掌握含有对象成员的派生类构构造函数的特点。
(5)理解类的继承可能发生的“二义性”问题(同名成员的访问)
二、知识点回顾
多继承构造函数定义的一般形式如下:
派生类名(参数总表):基类名1(参数表1),基类名2(参数表2),…,基类名n(参数表n) {
// 派生类新增成员的初始化语句
}
class B: public A class D:public A, public B, public C
{ {
B(int i,int j):A( i)
{ ….. D(int i,int j,int k, int l):A( i),B(j ),C( k),ob(l ) } { …….
}
}; };
…….
D obj(1,2,3,4);
多重继承构造函数的执行顺序与单继承下的构造函数执行顺序相同:
(1)先执行基类的构造函数。
(2)再执行对象成员的构造函数。
(3)最后执行派生类的构造函数体。
说明:处于同一层的各个基类的构造函数的执行顺序, 取决于声明派生类时所指定的各个基类的顺序, 与派生类构造函数中所定义的成员初始化列表中的顺序并没有关系.
说明:派生类构造函数后如未列出基类构造函数的调用,默认调用的是无参或带默认参数的构造函数。
三、实验内容
1. P191题4.15输入下列程序,分析程序运行结果........
。 理解多重继承(画出类的层次结构图),注意派生类构造函数的定义格式,注意构造函
数的执行顺序,注意同名成员的访问。
#include
#include
using namespace std;
class B1{
int b1;
public:
B1(int i)
{b1=i;
cout<<"Construcor B1."<
}
void print()
{ cout< } }; class B2{ int b2; public: B2(int i) {b2=i; cout<<"Construcor B2."< } void print() { cout< } }; class B3{ int b3; public: B3(int i) {b3=i; cout<<"Construcor B1."< } int getb3() { return b3; } }; class A:public B2,public B1{ int a; B3 bb; public: A(int i,int j,int k,int l):B1(i),B2(j),bb(k) //此处注意派生类构造函数的定义格式 {a=l; cout<<"Constructor A."< } void print() // { B1::print(); //同名成员的访问,注意消除二义性 B2::print(); //同名成员的访问