实验2 派生类与继承doc.docx
- 文档编号:3845591
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:14
- 大小:47.67KB
实验2 派生类与继承doc.docx
《实验2 派生类与继承doc.docx》由会员分享,可在线阅读,更多相关《实验2 派生类与继承doc.docx(14页珍藏版)》请在冰豆网上搜索。
实验2派生类与继承doc
实验2派生类与继承
实验课程名:
面向对象程序设计(C++)
专业班级:
计算机应用技术学号:
201130410115姓名:
熊柳强
实验时间:
2012-10-9实验地点:
k4-207指导教师:
谢晋
一、实验目的和要求
(1)掌握派生类的声明方法和派生类构造函数的定义方法。
(2)掌握不同继承方式下,基类成员在派生类中的访问属性。
(3)掌握在继承方式下,构造函数与析构函数的执行顺序与构造规则。
(4)学习虚基类在解决二义性问题中的作用。
二、实验内容
1、源程序代码:
//test4_1.cpp
#include
usingnamespacestd;
classBase{
public:
voidsetx(inti)
{x=i;}
intgetx()
{returnx;}
public:
intx;
};
classDerived:
publicBase{
public:
voidsety(inti)
{y=i;}
intgety()
{returny;}
voidshow()
{cout<<"Base:
:
x="< } public: inty; }; intmain() { Derivedbb; bb.setx(16); bb.sety(25); bb.show(); cout<<"Base: : x="< cout<<"Derived: : y="< cout<<"Base: : x="< cout<<"Derived: : y="< return0; } 运行结果: (1)写出程序的运行结果。 (2)按以下要求,对程序进行修改后再调试,指出调试中出错的原因。 将基类Base中数据成员x的访问权限改为private时,会出现哪些错误? 为什么? 在派生类中不能使用基类的数据成员。 因为数据成员为私有的。 将基类Base中数据成员x的访问权限改为protected时,会出现哪些错误? 为什么? 主函数中不能访问基类中的保护数据成员。 因为数据成员被保护了。 在源程序的基础上,将派生类Derived的继承方式改为private时,会出现哪些错误? 为什么? Setx、x、getx不能访问Base中的共有数据成员。 因为派生继承为是由继承。 在源程序的基础上,将派生类Derived的继承方式改为protected时,会出现哪些错误? 为什么? 和上面的问题一样。 2、源程序代码: #include usingnamespacestd; classPerson{ public: voidxinxi() { cin>>stu_no; cin>>name; cin>>sex; cin>>age; } voidshow() { cout<<"编号: "< cout<<"姓名: "< cout<<"性别: "< cout<<"年龄: "< } private: intstu_no; charname[15]; charsex[3]; intage; }; classStudent: publicPerson{ public: voidshuru1() { cin>>system; cin>>score; } voidshow1() { cout<<"院系: "< cout<<"成绩: "< } private: floatscore; charsystem[15]; }; classTeacher: publicPerson{ public: voidshuru2() { cin>>postion; cin>>part; } voidshow2() { cout<<"职称: "< cout<<"部门: "< } private: charpostion[20]; charpart[56]; }; voidmain() { StudentA; A.xinxi(); A.show(); A.shuru1(); A.show1(); TeacherB; B.xinxi(); B.show(); B.shuru2(); B.show2(); } 运行结果: 3、源程序代码: (1)阅读、编辑、编译、调试和运行以下程序,并写出程序的运行结果。 //test4_3_1.cpp #include #include usingnamespacestd; classMyArray{ public: MyArray(intleng); ~MyArray(); voidInput(); voidDisplay(string); protected: int*alist; intlength; }; MyArray: : MyArray(intleng) { if(leng<=0) { cout<<"errorlength"; exit (1); } alist=newint[leng]; length=leng; if(alist==NULL) { cout<<"assignfailure"; exit (1); } cout<<"MyArray类对象已创建。 "< } MyArray: : ~MyArray() { delete[]alist; cout<<"MyArray类对象被撤销。 "< } voidMyArray: : Display(stringstr) { inti; int*p=alist; cout< "; for(i=0;i cout<<*p<<""; cout< } voidMyArray: : Input() { cout<<"请键盘输入"< "; inti; int*p=alist; for(i=0;i cin>>*p; } intmain() { MyArraya(5); a.Input(); a.Display("显示已输入的"); return0; } 运行结果: (2)声明一个类SortArray继承类MyArray,在该类中定义一个函数,具有将输入的整数从小到大进行排序的功能。 classSortArray: publicMyArray{ public: voidSort(); SortArray(intleng): MyArray(leng) { cout<<"SortArray类对象已创建。 "< } virtual~SortArray(); }; SortArray: : ~SortArray() { cout<<"SortArray类对象被撤销。 "< } voidSortArray: : Sort() { inti,j;intmin,temp;inta[5]; int*p=alist; for(i=0;i { a[i]=*p;} for(i=0;i<4;i++) { min=i; for(j=i;j<5;j++,p++) if(a[min]>a[j])min=j; temp=a[i]; a[i]=a[min]; a[min]=temp; p=alist; } for(i=0;i *p=a[i]; for(i=0;i p=alist; } intmain() { SortArrays(5); s.Input(); s.Display("显示排序以前的"); s.Sort(); s.Display("显示排序以后的"); return0; } 运行结果: (3)声明一个类ReArray继承类MyArray,在该类中定义一个函数,具有将输入的整数进行倒置的功能。 classReArray: publicMyArray{ public: voidreverse(); ReArray(intleng); virtual~ReArray(); }; voidReArray: : reverse() { inti,temp; int*p=alist; intb[5]; for(i=0;i { b[i]=*p;} for(i=0;i<=length/2;i++,p++) { temp=b[i]; b[i]=b[length-i-1]; b[length-i-1]=temp; p=alist-1; } for(i=0;i *p=b[i]; for(i=0;i p=alist-1; } ReArray: : ~ReArray() { cout<<"ReArray类对象被撤销。 "< } ReArray: : ReArray(intleng): MyArray(leng) { cout<<"ReArray类对象已创建。 "< } intmain() { ReArrays(5); s.Input(); s.Display("显示倒置以前的"); s.reverse(); s.Display("显示倒置以后的"); return0; } 运行结果: (4)声明一个类AverArray继承类MyArray,在该类中定义一个函数,具有求输入的整数平均值的功能。 classAverArray: publicMyArray{ public: AverArray(intleng); ~AverArray(); doubleAver(); }; AverArray: : AverArray(intleng): MyArray(leng) { cout<<"AverArray类对象已创建。 "< } AverArray: : ~AverArray() { delete[]alist; cout<<"AverArray类对象被撤销。 "< } doubleAverArray: : Aver() { inti,c[5]; doubleave=0,sum=0; int*p=alist; for(i=0;i c[i]=*p; for(i=0;i { sum+=c[i]; ave=sum/length; p=alist; } for(i=0;i *p=ave; for(i=0;i p=alist; returnave; } intmain() { AverArrays(5); s.Input(); s.Display("输入的"); cout<<"5个数相加后的平均值: "< printf("\n"); return0; } 运行结果: (5)请读者自行编写构造函数、析构函数和求平均值函数Aver(求解整数的平均值),以及修改主函数。 声明一个NewArray类,同时继承了类SortArray,ReArray和AverArray,使得类NewArray的对象同时具有排序、倒置和求平均值的功能。 在继承的过程中声明MyArray为虚基类,体会虚基类在解决二义性问题中的作用 三、实验结论 (1)运用继承可以解决代码的重用性问题 (2)通过继承可以将基类中的成员运用到派生类当中 (3)通过对象调用成员函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验2 派生类与继承doc 实验 派生 继承 doc