教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 外语考试 >

实验六__继承三_——_多继承及继承的应用

来源:网络收集 时间:2026-08-16
导读: 电脑知识文档 实验六继承㈢——多继承及继承的应用 一、实验目的 1.理解多继承的概念,熟悉多继承的定义及应用; 2.理解多继承方式下的二义性产生原因,熟悉解决二义性的方法; 3.进一步熟悉继承的综合应用。 二、实验学时 课内实验:2课时课外练习:2课

电脑知识文档

实验六继承㈢——多继承及继承的应用

一、实验目的

1.理解多继承的概念,熟悉多继承的定义及应用;

2.理解多继承方式下的二义性产生原因,熟悉解决二义性的方法;

3.进一步熟悉继承的综合应用。

二、实验学时

课内实验:2课时课外练习:2课时

三本实验涉及的新知识

㈠多继承的概念

如果一个派生类由二个或二个以上的基类派生得到,称为多重继承(多继承)㈡多继承派生类的定义

格式:

class派生类名:继承方式1,基类名1,继承方式2,基类名2,…

{派生类新定义的成员}

㈢多继承派生类的构造函数

1.定义

格式:

构造函数名(总参数表):基类名1(参数表1),基类名2(参数表2),…

{构造函数的函数体}

2.说明

⑴多继承的构造函数的总参数表必须提供所有基类构造函数的值及新增数据成员的值。

⑵定义派生类对象时,多继承方式下构造函数的执行顺序为:先执行所有基类的构造函数(按排列顺序)后执行派生类的构造函数。

⑶释放派生类对象时,析构函数的执行顺序与构造函数的执行顺序相反。

㈣多继承派生类中为数据成员提供值的函数

在多继承方式下,为数据成员提供值的函数必须同时为所有基类的数据成员提供值。㈤多继承的二义性

1.同名函数产生的二义性

在多重继承方式下,如果在多个基类中有同名成员函数,可能出现二义性问题。解决办法是在调用函数时使用类名及作用域运算符。

2.间接基类产生的二义性

在多重继承下,如果一个派生类由二个或以上基类派生得到,而这些基类又是由一个基类派生得到的,也会产生二义性。解决办法是使用虚基类,即在定义直接基类时,将间接基类说明为虚基类。

定义格式:

class直接基类名:virtual继承方式间接基类名

{派生类新定义的成员}

电脑知识文档

四、实验内容

㈠验证及认知实验

按要求调试下列程序,并回答相关问题。

程序1(exp_601.cpp)

#include<iostream.h>

classX

{intx;

public:

X(inta=0){x=a;}//基类X的构造函数

voidset_x(inta){x=a;}

voidshow(void)

{cout<<"x="<<x;}

};

classY

{inty;

public:

Y(intb=0){y=b;}//基类Y的构造函数

voidset_y(intb){y=b;}

voidshow(void)

{cout<<"y="<<y;}

};

classZ:publicX,publicY

//classZ:publicX,privateY

{intz;

public:

Z(inta=0,intb=0,intc=0):X(a),Y(b)

{z=c;}//派生类Z的构造函数

voidset_xyz(inta,intb,intc)

{set_x(a);set_y(b);z=c;}

voidshow_z(void)

{cout<<"z="<<z;}

voidprint(void)

{show();//显示x的值

show();//显示y的值

show_z();//显示z的值

}

};

voidmain()

{Zobj1(3,4,5),obj2;

obj2.set_xyz(10,20,30);

obj1.print();cout<<endl;

obj2.print();cout<<endl;

}

问题:

电脑知识文档

⑴编译该程序,会出现编译错误,其原因是在定义Z类的print()成员函数中的show()函数调用时出现了

⑵将“show();

⑶将“show();。解决的方法是://显示x的值”中的“show()”改为//显示y的值”中的“show()”改为

⑷调试成功后的输出结果是:

是成员函数voidset_xyz(inta,intb,intc)中“set_x(a)”的作用,“set_y(b)”的作用是。

程序2(exp_602.cpp)

#include<iostream.h>

classbase

{private:

inta;

public:

base(intx)

{a=x;

cout<<"Constructingbasea="<<a<<endl;

}

};

classbase1:publicbase

{private:

intb;

public:

base1(intx1,intx2):base(x1)

{b=x2;

cout<<"Constructingbase1b="<<b<<endl;

}

};

classbase2:publicbase

{private:

intc;

public:

base2(intx1,intx2):base(x1)

{c=x2;

cout<<"Constructingbase2c="<<c<<endl;

}

};

classderived:publicbase1,publicbase2

{private:

intd;

public:

电脑知识文档

derived(intx1,intx2,intx3,intx4):base1(x1,x2),base2(x1,x3)

{d=x4;

cout<<"Constructingderivedd="<<d<<endl;

}

};

voidmain(void)

{derivedobj(2,3,4,5);}

问题:

⑹编译运行程序的输出结果是:

⑺从输出结果中可看出,间接基类“base”被调用了两次,产生原因是“derived”的两个直接基类“base1”、“base2”拥有共同基类“base”,产生了。

⑻将程序中“classbase1:publicbase”改为“classbase1:virtualpublicbase”

“classbase2:publicbase”改为“classbase2:virtualpublicbase”

“derived(intx1,intx2,intx3,intx4):base1(x1,x2),base2(x1,x3)”改为

“derived(intx1,intx2,intx3,intx4):base(x1),base1(x1,x2),base2(x1,x3)”重新编译运行程序的输出结果是:

⑼“virtualpublicbase”表示间接基类“base”为

㈡知识应用实验。

按要求调试程序(完善类的定义及主程序)。

1.题目:通过继承方式处理学生成绩。

2.内容

⑴类的定义:

人“person”类(person.h中定义):包括姓名、性别、出生日期(日期“date”本身是一个类,包括年、月、日三个成员——定义在date.h中)三个数据成员;

学生“student”类(student.h中定义),公有继承person类,新增学号、系、进校时间(date对象)三个数据成员;

成绩score类(score.h中定义):新增课程科数、成绩数组数据成员。

⑵成绩处理:源程序存放在“exp_603.cpp”中。

3.要求

⑴完善类的定义;

⑵程序调试办法:每建好一个类,均在main()函数中进行测试成功后再定义下一个类,测试程序以“exp_test.cpp”存盘;

电脑知识文档

⑶所有类定义测试后再调试、完善成绩处理程序。

程序:

//测试程序exp_test.cpp

#include<iostream.h>

#include<iomanip.h>

#include""//用不同类头文件

voidmain()

{……}

//各个类的定义

//date类的定义:存放在date.h中

classdate

{private:

intyear,month,day;//年、月、日三个私有成员

public:

date(void)

{year=1980;month=1;day=1;}

voidset_date(inty,intm,intd)

{}//完成成员函数的定义

intget_year(void)

{}//完成成员函数的定义

intget_month(void)

{}//完成成员函数的定义

intget_day(void)

{}//完成成员函数的定义

};

//person类的定义:保存在pe …… 此处隐藏:2982字,全部文档内容请下载后查看。喜欢就下载吧 ……

实验六__继承三_——_多继承及继承的应用.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/118447.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)