内蒙古科技大学面向对象的程序设计实验 继承二Word文档格式.docx
《内蒙古科技大学面向对象的程序设计实验 继承二Word文档格式.docx》由会员分享,可在线阅读,更多相关《内蒙古科技大学面向对象的程序设计实验 继承二Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
15-软件一班一、实验目的1理解多重派生的定义;
2理解多重派生中构造函数与析构函数的调用顺序;
3理解多重派生中虚拟基类的作用;
二、实验环境编译器:
VisualC+6.0.操作系统:
Windows7旗舰版三、实验内容2.1练习
(一):
1理解下面的程序,并在VC+6.0下运行查看结果,回答程序后面的问题。
classCBase1public:
CBase1(inta):
a(a)coutbase1structure.endl;
CBase1()coutbase1destructure.endl;
voidprint()couta=aendl;
protected:
inta;
classCBase2public:
CBase2(intb):
b(b)coutbase2structure.endl;
CBase2()coutbase2destructure.endl;
voidprint()coutb=bendl;
intb;
classCDerive:
publicCBase1,publicCBase2public:
CDerive()coutderivestructure.endl;
CDerive()coutderivedestructure.endl;
voidprint()CBase1:
print();
CBase2:
b1.print();
b2.print();
coutc=cendl;
private:
CBase1b1;
CBase2b2;
intc;
voidmain()CDerived;
d.print();
问题一:
改正以上程序中存在的错误,并分析该程序的输出结果。
2理解下面的程序,并在VC+6.0下运行查看结果,回答程序后面的问题。
#includeiostream.hclassCBasepublic:
CBase(inta):
a(a)inta;
classCDerive1:
publicCBasepublic:
CDerive1(inta):
CBase(a);
classCDerive2:
CDerive2(inta):
publicCDerive1,publicCDerive2public:
CDerive(inta,intb):
CDerive1(a),CDerive2(b);
voidmain()CDerived(1,2);
coutd.aendl;
在不改变原有程序意图的前提下,改正以上程序,并使程序正确输出。
四、实验过程练习1实验题目提供源代码如下:
尝试编译结果如下:
分析错误原因,是派生类继承两个基类的数据以及内嵌两个子对象的数据没有正确的构造,这里加上正确的形参表和初始化列表修改之后的代码如下:
加上之后,再次尝试编译结果如下:
运行结果如下:
练习2题目源代码如下:
编译结果如下:
代码显示无法分辨a的来源,导致了二义性问题,此处为不更改题目条件,所以采取虚基类方式修改修改代码如下:
再次运行结果如下:
CBase(a)时CBase(b)时五、实验总结实验源代码:
练习
(一)#includeclassCBase1public:
CDerive(inta=0,intb=0,intaa=0,intbb=0,intc1=0):
CBase1(a),CBase2(b),b1(aa),b2(bb),c(c1)coutderivestructure.endl;
/派生类构造函数无法完成继承来的基类数据初始化CDerive()coutderivedestructure.endl;
/*#includeclassCBase1public:
*/练习
(二)#includeiostream.hclassCBasepublic:
virtualpublicCBasepublic:
CDerive1(a),CDerive2(a),CBase(b);
六、参考文献参考的资料:
C+面向对象程序设计