您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 实验2-派生类与继承.doc
实验2派生类与继承实验课程名:面向对象程序设计(C++)专业班级:计算机应用技术学号:201130410115姓名:熊柳强实验时间:2012-10-9实验地点:k4-207指导教师:谢晋一、实验目的和要求(1)掌握派生类的声明方法和派生类构造函数的定义方法。(2)掌握不同继承方式下,基类成员在派生类中的访问属性。(3)掌握在继承方式下,构造函数与析构函数的执行顺序与构造规则。(4)学习虚基类在解决二义性问题中的作用。二、实验内容1、源程序代码://test4_1.cpp#includeiostreamusingnamespacestd;classBase{public:voidsetx(inti){x=i;}intgetx(){returnx;}public:intx;};classDerived:publicBase{public:voidsety(inti){y=i;}intgety(){returny;}voidshow(){coutBase::x=xendl;}public:inty;};intmain(){Derivedbb;bb.setx(16);bb.sety(25);bb.show();coutBase::x=bb.xendl;coutDerived::y=bb.yendl;coutBase::x=bb.getx()endl;coutDerived::y=bb.gety()endl;return0;}运行结果:(1)写出程序的运行结果。(2)按以下要求,对程序进行修改后再调试,指出调试中出错的原因。错误!未找到引用源。将基类Base中数据成员x的访问权限改为private时,会出现哪些错误?为什么?在派生类中不能使用基类的数据成员。因为数据成员为私有的。错误!未找到引用源。将基类Base中数据成员x的访问权限改为protected时,会出现哪些错误?为什么?主函数中不能访问基类中的保护数据成员。因为数据成员被保护了。错误!未找到引用源。在源程序的基础上,将派生类Derived的继承方式改为private时,会出现哪些错误?为什么?Setx、x、getx不能访问Base中的共有数据成员。因为派生继承为是由继承。错误!未找到引用源。在源程序的基础上,将派生类Derived的继承方式改为protected时,会出现哪些错误?为什么?和上面的问题一样。2、源程序代码:#includeiostreamusingnamespacestd;classPerson{public:voidxinxi(){cinstu_no;cinname;cinsex;cinage;}voidshow(){cout编号:stu_noendl;cout姓名:nameendl;cout性别:sexendl;cout年龄:ageendl;}private:intstu_no;charname[15];charsex[3];intage;};classStudent:publicPerson{public:voidshuru1(){cinsystem;cinscore;}voidshow1(){cout院系:systemendl;cout成绩:scoreendl;}private:floatscore;charsystem[15];};classTeacher:publicPerson{public:voidshuru2(){cinpostion;cinpart;}voidshow2(){cout职称:postionendl;cout部门:partendl;}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#includeiostream#includestringusingnamespacestd;classMyArray{public:MyArray(intleng);~MyArray();voidInput();voidDisplay(string);protected:int*alist;intlength;};MyArray::MyArray(intleng){if(leng=0){couterrorlength;exit(1);}alist=newint[leng];length=leng;if(alist==NULL){coutassignfailure;exit(1);}coutMyArray类对象已创建。endl;}MyArray::~MyArray(){delete[]alist;coutMyArray类对象被撤销。endl;}voidMyArray::Display(stringstr){inti;int*p=alist;coutstrlength个整数:;for(i=0;ilength;i++,p++)cout*p;coutendl;}voidMyArray::Input(){cout请键盘输入length个整数:;inti;int*p=alist;for(i=0;ilength;i++,p++)cin*p;}intmain(){MyArraya(5);a.Input();a.Display(显示已输入的);return0;}运行结果:(2)声明一个类SortArray继承类MyArray,在该类中定义一个函数,具有将输入的整数从小到大进行排序的功能。classSortArray:publicMyArray{public:voidSort();SortArray(intleng):MyArray(leng){coutSortArray类对象已创建。endl;}virtual~SortArray();};SortArray::~SortArray(){coutSortArray类对象被撤销。endl;}voidSortArray::Sort(){inti,j;intmin,temp;inta[5];int*p=alist;for(i=0;ilength;i++,p++){a[i]=*p;}for(i=0;i4;i++){min=i;for(j=i;j5;j++,p++)if(a[min]a[j])min=j;temp=a[i];a[i]=a[min];a[min]=temp;p=alist;}for(i=0;ilength;i++,p++)*p=a[i];for(i=0;ilength;i++,p++)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;ilength;i++,p++){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;ilength;i++,p++)*p=b[i];for(i=0;ilength/2;i++,p++)p=alist-1;}ReArray::~ReArray(){coutReArray类对象被撤销。endl;}ReArray::ReArray(intleng):MyArray(leng){coutReArray类对象已创建。endl;}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){coutAverArray类对象已创建。endl;}AverArray::~AverArray(){delete[]alist;coutAverArray类对象被撤销。endl;}doubleAverArray::Aver(){inti,c[5];doubleave=0,sum=0;int*p=alist;for(i=0;ilength;i++,p++)c[i]=*p;for(i=0;ilength;i++,p++){sum+=c[i];ave=sum/length;p=alist;}for(i=0;ilength;i++,p++)*p=ave;for(i=0;ilength;i++,p++)p=alist;returnave;}intmain(){AverArrays(5);s.Input();s.Display(输入的);cout5个数相加后的平均值:s.Aver();printf(\n);return0;}运行结果:(5)请读者自行编写构造函数、析构函数和求平均值函数Aver(求解整数的平均值),以及修改主函数。声明一个NewArray类,同时继承了类SortArray,ReArray和AverArray,使得类NewArray的对象同时具有排序、倒置和求平均值的功能。在继承的过程中声明MyArray为虚基类,体会虚基类在解决二义性问题中的作用三、实验结论(1)运用继承可以解决代码的重用性问题(2)通过继承可以将基类中的成员运用到派生类当中(3)通过对象调用成员函数
本文标题:实验2-派生类与继承.doc
链接地址:https://www.777doc.com/doc-4781476 .html