实验六__继承三_——_多继承及继承的应用
电脑知识文档
实验六继承㈢——多继承及继承的应用
一、实验目的
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字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [外语考试]管理学 第13章 沟通
- [外语考试]07、中高端客户销售流程--分类、筛选讲
- [外语考试]2015-2020年中国高筋饺子粉市场发展现
- [外语考试]“十三五”重点项目-汽车燃油表生产建
- [外语考试]雅培奶粉培乐系列适用年龄及特点
- [外语考试]九三学社入社申请人调查问卷
- [外语考试]等级薪酬体系职等职级表
- [外语考试]货物买卖合同纠纷起诉状(范本一)
- [外语考试]青海省实施消防法办法
- [外语考试]公交车语音自动报站系统的设计第3稿11
- [外语考试]logistic回归模型在ROC分析中的应用
- [外语考试]2017-2021年中国隔膜泵行业发展研究与
- [外语考试]神经内科下半年专科考试及答案
- [外语考试]园林景观设计规范标准
- [外语考试]2018八年级语文下册第一单元4合欢树习
- [外语考试]分布式发电及微网运行控制技术应用
- [外语考试]三人行历史学笔记:中世纪人文主义思想
- [外语考试]2010届高考复习5年高考3年联考精品历史
- [外语考试]挖掘机驾驶员安全生产责任书
- [外语考试]某211高校MBA硕士毕业论文开题报告(范
- 用三层交换机实现大中型企业VLAN方案
- 斯格配套系种猪饲养管理
- 涂层测厚仪厂家直销
- 研究生学校排行榜
- 鄱阳湖湿地景观格局变化及其驱动力分析
- 医学基础知识试题库
- 2010山西省高考历年语文试卷精选考试技
- 脉冲宽度法测量电容
- 谈高职院校ESP教师的角色调整问题
- 低压配电网电力线载波通信相关技术研究
- 余额宝和城市商业银行的转型研究
- 篮球行进间运球教案
- 气候突变的定义和检测方法
- 财经大学基坑开挖应急预案
- 高大支模架培训演示
- 一种改进的稳健自适应波束形成算法
- 2-3-鼎视通核心人员薪酬股权激励管理手
- 我国电阻焊设备和工艺的应用现状与发展
- MTK手机基本功能覆盖测试案例
- 七年级地理教学课件上册第四章第一节




