- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验六 继承㈢ —— 多继承及继承的应用
一、实验目的
1.理解多继承的概念,熟悉多继承的定义及应用;
2.理解多继承方式下的二义性产生原因,熟悉解决二义性的方法;
3.进一步熟悉继承的综合应用。
二、实验学时
课内实验:2课时 课外练习:2课时
三 本实验涉及的新知识
㈠ 多继承的概念
如果一个派生类由二个或二个以上的基类派生得到,称为多重继承(多继承)
㈡ 多继承派生类的定义
格式:
class 派生类名:继承方式1 , 基类名1, 继承方式2, 基类名2, …
{ 派生类新定义的成员 }
㈢ 多继承派生类的构造函数
1.定义
格式:
构造函数名(总参数表):基类名1(参数表1), 基类名2(参数表2),…
{ 构造函数的函数体 }
2.说明
⑴ 多继承的构造函数的总参数表必须提供所有基类构造函数的值及新增数据成员的值。
⑵ 定义派生类对象时,多继承方式下构造函数的执行顺序为:先执行所有基类的构造函数(按排列顺序)后执行派生类的构造函数。
⑶ 释放派生类对象时,析构函数的执行顺序与构造函数的执行顺序相反。
㈣ 多继承派生类中为数据成员提供值的函数
在多继承方式下,为数据成员提供值的函数必须同时为所有基类的数据成员提供值。
㈤ 多继承的二义性
1.同名函数产生的二义性
在多重继承方式下,如果在多个基类中有同名成员函数,可能出现二义性问题。解决办法是在调用函数时使用类名及作用域运算符。
2.间接基类产生的二义性
在多重继承下,如果一个派生类由二个或以上基类派生得到,而这些基类又是由一个基类派生得到的,也会产生二义性。解决办法是使用虚基类,即在定义直接基类时,将间接基类说明为虚基类。
定义格式:
class 直接基类名 : virtual 继承方式 间接基类名
{ 派生类新定义的成员 }
四、实验内容
㈠ 验证及认知实验
按要求调试下列程序,并回答相关问题。
程序1(exp_601.cpp)
#includeiostream.h
class X
{ int x;
public :
X(int a=0){x=a;}//基类X的构造函数
void set_x(int a){x=a;}
void show(void)
{cout x=x;}
};
class Y
{ int y;
public :
Y(int b=0){y=b;}//基类Y的构造函数
void set_y(int b){y=b;}
void show(void)
{cout y=y;}
};
class Z:public X,public Y
//class Z:public X,private Y
{ int z;
public :
Z(int a=0,int b=0,int c=0): X(a),Y(b)
{z=c;} //派生类Z的构造函数
void set_xyz(int a,int b,int c)
{ set_x(a); set_y(b);z=c;}
void show_z(void)
{cout z=z;}
void print(void)
{ show(); //显示x的值
show(); //显示y的值
show_z(); //显示z的值
}
};
void main()
{ Z obj1(3,4,5),obj2;
obj2.set_xyz(10,20,30);
obj1.print();coutendl;
obj2.print();coutendl;
}
问题:
⑴ 编译该程序,会出现编译错误,其原因是在定义Z类的print ( )成员函数中的show( )函数调用时出现了 。解决的方法是:
⑵ 将“show(); //显示x的值”中的“show( )”改为
⑶ 将“show(); //显示y的值”中的“show( )”改为
⑷ 调试成功后的输出结果是:
⑸ 成员函数void set_xyz(int a,int b,int c)中“set_x(a)”的作用是 ,“set_y(b)”的作用是 。
程序2(exp_602.cpp)
#includeiostream.h
class base
{ private:
文档评论(0)