内蒙古科技大学面向对象的程序设计实验9 继承二#甄选.docx

上传人:b****7 文档编号:11483893 上传时间:2023-03-01 格式:DOCX 页数:19 大小:472.86KB
下载 相关 举报
内蒙古科技大学面向对象的程序设计实验9 继承二#甄选.docx_第1页
第1页 / 共19页
内蒙古科技大学面向对象的程序设计实验9 继承二#甄选.docx_第2页
第2页 / 共19页
内蒙古科技大学面向对象的程序设计实验9 继承二#甄选.docx_第3页
第3页 / 共19页
内蒙古科技大学面向对象的程序设计实验9 继承二#甄选.docx_第4页
第4页 / 共19页
内蒙古科技大学面向对象的程序设计实验9 继承二#甄选.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

内蒙古科技大学面向对象的程序设计实验9 继承二#甄选.docx

《内蒙古科技大学面向对象的程序设计实验9 继承二#甄选.docx》由会员分享,可在线阅读,更多相关《内蒙古科技大学面向对象的程序设计实验9 继承二#甄选.docx(19页珍藏版)》请在冰豆网上搜索。

内蒙古科技大学面向对象的程序设计实验9 继承二#甄选.docx

内蒙古科技大学面向对象的程序设计实验9继承二#甄选

内蒙古科技大学面向对象的程序设计实验9继承

(二)#优选、

内蒙古科技大学

面向对象的程序设计

实验报告

 

 

课程名称:

面向对象的程序设计

姓名:

陈伟光

实验名称:

继承

(二)

学号:

1567159118

任课教师:

刘月峰

专业:

软件工程

指导教师:

刘月峰

班级:

15-软件一班

 

 

一、实验目的

 

1.理解多重派生的定义;

2.理解多重派生中构造函数与析构函数的调用顺序;

3.理解多重派生中虚拟基类的作用;

二、实验环境

编译器:

VisualC++6.0.

操作系统:

Windows7 旗舰版

 

三、实验内容

2.1练习

(一):

1.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。

classCBase1

{

public:

CBase1(inta)

 :

a(a)

{

 cout<<"base1structure..."<

}

~CBase1()

{

 cout<<"base1destructure..."<

}

voidprint()

{

 cout<<"a="<

}

protected:

inta;

};

classCBase2

{

public:

CBase2(intb)

 :

b(b)

{

 cout<<"base2structure..."<

}

~CBase2()

{

 cout<<"base2destructure..."<

}

voidprint()

{

 cout<<"b="<

}

protected:

intb;

};

classCDerive:

publicCBase1,publicCBase2

{

public:

CDerive()

{

 cout<<"derivestructure..."<

}

~CDerive()

{

 cout<<"derivedestructure..."<

}

voidprint()

{

 CBase1:

:

print();

 CBase2:

:

print();

 b1.print();

 b2.print();

 cout<<"c="<

}

private:

CBase1b1;

CBase2b2;

intc;

};

voidmain()

{

CDerived;

d.print();

}

问题一:

改正以上程序中存在的错误,并分析该程序的输出结果。

2.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。

#include"iostream.h"

classCBase

{

public:

CBase(inta)

 :

a(a)

{

}

inta;

};

classCDerive1:

publicCBase

{

public:

CDerive1(inta)

 :

CBase(a)

{

}

};

classCDerive2:

publicCBase

{

public:

CDerive2(inta)

 :

CBase(a)

{

}

};

classCDerive:

publicCDerive1,publicCDerive2

{

public:

CDerive(inta,intb)

 :

CDerive1(a),CDerive2(b)

{

}

};

voidmain()

{

CDerived(1,2);

cout<

}

问题一:

在不改变原有程序意图的前提下,改正以上程序,并使程序正确输出。

 

四、实验过程

练习1

实验题目提供源代码如下:

尝试编译结果如下:

分析错误原因,是派生类继承两个基类的数据以及内嵌两个子对象的数据没有正确的构造,这里加上正确的形参表和初始化列表

 

修改之后的代码如下:

加上之后,再次尝试编译结果如下:

运行结果如下:

 

练习2

题目源代码如下:

 

 

编译结果如下:

代码显示无法分辨a的来源,导致了二义性问题,此处为不更改题目条件,所以采取虚基类方式修改

修改代码如下:

再次运行结果如下:

CBase(a)时

CBase(b)时

 

五、实验总结

实验源代码:

练习

(一)

 

 

#include

classCBase1

{

public:

CBase1(inta)

:

a(a)

{

cout<<"base1structure..."<

}

~CBase1()

{

cout<<"base1destructure..."<

}

voidprint()

{

cout<<"a="<

}

protected:

inta;

};

classCBase2

{

public:

CBase2(intb)

:

b(b)

{

cout<<"base2structure..."<

}

~CBase2()

{

cout<<"base2destructure..."<

}

voidprint()

{

cout<<"b="<

}

protected:

intb;

};

classCDerive:

publicCBase1,publicCBase2

{

public:

CDerive(inta=0,intb=0,intaa=0,intbb=0,intc1=0):

CBase1(a),CBase2(b),b1(aa),b2(bb),c(c1)

{

cout<<"derivestructure..."<

}

~CDerive()

{

cout<<"derivedestructure..."<

}

voidprint()

{

CBase1:

:

print();

CBase2:

:

print();

b1.print();

b2.print();

cout<<"c="<

}

private:

CBase1b1;

CBase2b2;

intc;

};

voidmain()

{

CDerived;

d.print();

}

 

/*

#include

classCBase1

{

public:

CBase1(inta)

:

a(a)

{

cout<<"base1structure..."<

}

~CBase1()

{

cout<<"base1destructure..."<

}

voidprint()

{

cout<<"a="<

}

protected:

inta;

};

classCBase2

{

public:

CBase2(intb)

:

b(b)

{

cout<<"base2structure..."<

}

~CBase2()

{

cout<<"base2destructure..."<

}

voidprint()

{

cout<<"b="<

}

protected:

intb;

};

classCDerive:

publicCBase1,publicCBase2

{

public:

CDerive()

{

cout<<"derivestructure..."<

}

~CDerive()

{

cout<<"derivedestructure..."<

}

voidprint()

{

CBase1:

:

print();

CBase2:

:

print();

b1.print();

b2.print();

cout<<"c="<

}

private:

CBase1b1;

CBase2b2;

intc;

};

voidmain()

{

CDerived;

d.print();

}

*/

 

练习

(二)

#include"iostream.h"

classCBase

{

public:

CBase(inta)

:

a(a)

{

}

inta;

};

classCDerive1:

virtualpublicCBase

{

public:

CDerive1(inta)

:

CBase(a)

{

}

};

classCDerive2:

virtualpublicCBase

{

public:

CDerive2(inta)

:

CBase(a)

{

}

};

classCDerive:

publicCDerive1,publicCDerive2

{

public:

CDerive(inta,intb)

:

CDerive1(a),CDerive2(a),CBase(b)

{

}

};

voidmain()

{

CDerived(1,2);

cout<

 

 

 

 

 

 

六、参考文献

参考的资料:

C++面向对象程序设计

 

如有侵权请联系网站删除

感谢您使用本店文档您的满意是我们永恒的追求!

(本句可删)

------------------------------------------------------------------------------------------------------------

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > IT认证

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1