实验2 派生类与继承docWord格式文档下载.docx
《实验2 派生类与继承docWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《实验2 派生类与继承docWord格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
intgetx()
{returnx;
intx;
};
classDerived:
publicBase{
voidsety(inti)
{y=i;
intgety()
{returny;
voidshow()
{cout<
<
"
Base:
:
x="
x<
endl;
inty;
intmain()
{
Derivedbb;
bb.setx(16);
bb.sety(25);
bb.show();
cout<
bb.x<
Derived:
y="
bb.y<
bb.getx()<
bb.gety()<
return0;
运行结果:
(1)写出程序的运行结果。
(2)按以下要求,对程序进行修改后再调试,指出调试中出错的原因。
将基类Base中数据成员x的访问权限改为private时,会出现哪些错误?
为什么?
在派生类中不能使用基类的数据成员。
因为数据成员为私有的。
将基类Base中数据成员x的访问权限改为protected时,会出现哪些错误?
主函数中不能访问基类中的保护数据成员。
因为数据成员被保护了。
在源程序的基础上,将派生类Derived的继承方式改为private时,会出现哪些错误?
Setx、x、getx不能访问Base中的共有数据成员。
因为派生继承为是由继承。
在源程序的基础上,将派生类Derived的继承方式改为protected时,会出现哪些错误?
和上面的问题一样。
2、源程序代码:
classPerson{
voidxinxi()
{
cin>
>
stu_no;
name;
sex;
age;
}
cout<
编号:
stu_no<
姓名:
name<
性别:
sex<
年龄:
age<
private:
intstu_no;
charname[15];
charsex[3];
intage;
classStudent:
publicPerson{
voidshuru1()
system;
score;
voidshow1()
院系:
system<
成绩:
score<
floatscore;
charsystem[15];
classTeacher:
voidshuru2()
postion;
part;
voidshow2()
职称:
postion<
部门:
part<
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
string>
classMyArray{
MyArray(intleng);
~MyArray();
voidInput();
voidDisplay(string);
protected:
int*alist;
intlength;
MyArray:
MyArray(intleng)
if(leng<
=0)
errorlength"
;
exit
(1);
alist=newint[leng];
length=leng;
if(alist==NULL)
assignfailure"
MyArray类对象已创建。
~MyArray()
delete[]alist;
MyArray类对象被撤销。
voidMyArray:
Display(stringstr)
inti;
int*p=alist;
str<
length<
个整数:
for(i=0;
i<
length;
i++,p++)
*p<
"
Input()
请键盘输入"
int*p=alist;
*p;
MyArraya(5);
a.Input();
a.Display("
显示已输入的"
);
(2)声明一个类SortArray继承类MyArray,在该类中定义一个函数,具有将输入的整数从小到大进行排序的功能。
classSortArray:
publicMyArray{
voidSort();
SortArray(intleng):
MyArray(leng)
SortArray类对象已创建。
virtual~SortArray();
SortArray:
~SortArray()
SortArray类对象被撤销。
voidSortArray:
Sort()
inti,j;
intmin,temp;
inta[5];
a[i]=*p;
for(i=0;
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;
}
*p=a[i];
p=alist;
SortArrays(5);
s.Input();
s.Display("
显示排序以前的"
s.Sort();
显示排序以后的"
(3)声明一个类ReArray继承类MyArray,在该类中定义一个函数,具有将输入的整数进行倒置的功能。
classReArray:
voidreverse();
ReArray(intleng);
virtual~ReArray();
voidReArray:
reverse()
inti,temp;
intb[5];
b[i]=*p;
=length/2;
temp=b[i];
b[i]=b[length-i-1];
b[length-i-1]=temp;
p=alist-1;
*p=b[i];
length/2;
ReArray:
~ReArray()
ReArray类对象被撤销。
ReArray(intleng):
ReArray类对象已创建。
ReArrays(5);
显示倒置以前的"
s.reverse();
显示倒置以后的"
(4)声明一个类AverArray继承类MyArray,在该类中定义一个函数,具有求输入的整数平均值的功能。
classAverArray:
AverArray(intleng);
~AverArray();
doubleAver();
AverArray:
AverArray(intleng):
AverArray类对象已创建。
~AverArray()
AverArray类对象被撤销。
doubleAverArray:
Aver()
inti,c[5];
doubleave=0,sum=0;
c[i]=*p;
sum+=c[i];
ave=sum/length;
p=alist;
*p=ave;
returnave;
AverArrays(5);
输入的"
5个数相加后的平均值:
s.Aver();
printf("
\n"
(5)请读者自行编写构造函数、析构函数和求平均值函数Aver(求解整数的平均值),以及修改主函数。
声明一个NewArray类,同时继承了类SortArray,ReArray和AverArray,使得类NewArray的对象同时具有排序、倒置和求平均值的功能。
在继承的过程中声明MyArray为虚基类,体会虚基类在解决二义性问题中的作用
三、实验结论
(1)运用继承可以解决代码的重用性问题
(2)通过继承可以将基类中的成员运用到派生类当中
(3)通过对象调用成员函数