继承与多态性习题参考答案.docx
《继承与多态性习题参考答案.docx》由会员分享,可在线阅读,更多相关《继承与多态性习题参考答案.docx(13页珍藏版)》请在冰豆网上搜索。
继承与多态性习题参考答案
继承与多态性习题参考答案
————————————————————————————————作者:
————————————————————————————————日期:
C++程序设计语言习题及实验指导
第8章继承与多态性习题参考答案
8.3习题
8.3.1选择题
题号
1
2
3
4
5
6
7
8
9
10
答案
C
D
A
D
A
B
C
B
D
D
题号
11
12
13
14
15
16
17
18
19
20
答案
D
D
A
C
B
C
C
C
A
C
8.3.2填空题
1.
(1)a、b、c、x、y、z
(2)b、y(3)c、z(4)a、x(5)b、c、x、y、z
(6)b、y(7)y(8)b、c、z(9)a、x(10)b、c、x、y、z(11)y
(12)y(13)z(14)a、b、c、x(15)b、c、x、y、z(16)y
2.私有
3.抽象
4.虚基
5.
(1)基类
(2)对象
6.
(1)静态
(2)编译(3)虚函数
7.
(1)21
(2)05
8.
(1)10020030030
(2)10100(3)20200
9.
(1)510
(2)end.(3)2010
10.
(1)classAclassB
(2)end.(3)~classB~classA
11.
(1)10
(2)buildB(3)buildC(4)releaseA
12.
(1)classB
(2)classC(3)classD(4)5
13.
(1)55
(2)2020
14.
(1)10
(2)1020
15.
(1)1
(2)3(3)5(4)10010
16.
(1)B:
:
f()
(2)B:
:
fun()(3)A:
:
f()(4)B:
:
fun()
17.
(1)姓名陈涛年薪6.8万元。
(2)姓名李原(3)姓名李原月工资4000元
18.
(1)110
(2)2220
19.
(1)protected或public
(2)Base1(s1),Base2(s2)或Base2(s2),Base1(s1)
(3)Base1:
:
str(4)test.print()
20.
(1)virtualvoidshow()=0
(2)C(int,int,int)(注:
参数可有任一名称)
(3)b1(y)(4)&t
8.3.3编程题
1.求长方形的面积和长方体的表面积、体积
#include
classRectangle{
protected:
floatL;//长方形的长
floatW;//长方形的宽
floatarea;//长方形的面积
public:
Rectangle(floatL1,floatW1)
{
L=L1;
W=W1;
}
voidfunction(){area=L*W;}
voidshow()
{
cout<<"长为"<}
};
classCuboid:
publicRectangle{
floatH;//长方体的高
floatvolume;//长方体的体积
public:
Cuboid(floata,floatb,floatc):
Rectangle(a,b)
{H=c;}
voidfunction(){area=(L*W+L*H+W*H)*2;}
voidfun(){volume=L*W*H;}
voidshow()
{
cout<<"长为"<}
};
voidmain()
{
Rectangler(2,3);r.function();r.show();
Cuboidc(2,3,4);c.function();c.fun();c.show();
}
2.产生并输出圆桌信息
#include
#include
classCircle{
protected:
doubleradius;
doublearea;
public:
Circle(doubler){radius=r;}
};
classTable{
protected:
doubleheight;
public:
Table(doubleh){height=h;}
};
classRoundtable:
publicTable,publicCircle
{
char*color;
public:
Roundtable(doubleh,doubler,charc[]):
Circle(r),Table(h)
{
color=newchar[strlen(c)+1];
strcpy(color,c);
}
voidfun(){area=3.14*radius*radius;}
voidshow()
{
cout<<"高度:
"<cout<<"面积:
"<
cout<<"颜色:
"<}
~Roundtable(){delete[]color;}
};
voidmain()
{
Roundtablert(0.75,1.1,"黑色");
rt.fun();rt.show();
}
3.计算企业的经营税
#include
#include
classTax{
protected:
charname[50];//企业名称
doubleincome;//经营收入
doubletaxes;//税金
public:
Tax(char*n,doublein)
{
strcpy(name,n);
income=in;
}
virtualvoidfun()=0;
voidshow()
{
cout<}
};
classService:
publicTax{
public:
Service(char*n,doublein):
Tax(n,in)
{}
voidfun()
{
taxes=income*5/100;
}
};
classFabrication:
publicTax{
public:
Fabrication(char*n,doublein):
Tax(n,in)
{}
voidfun()
{
taxes=income*17/100;
}
};
voidprint(Tax&t){t.fun();t.show();}
voidmain()
{
charname[50];
intincome;
cout<<"请输入服务性企业名称:
";cin>>name;
cout<<"请输入经营收入(万元):
";cin>>income;
Services(name,income);print(s);
cout<<"请输入生产性企业名称:
";cin>>name;
cout<<"请输入经营收入(万元):
";cin>>income;
Fabricationf(name,income);print(f);
}
4.把原始体育成绩转换为等第
#include
classSports{
protected:
intitem;//项目
charname[20];//姓名
doublescore;//原始成绩
chargrade[10];//评定等第
public:
Sports(inti,char*n)
{
item=i;
strcpy(name,n);
cout<<"请输入原始成绩:
";
cin>>score;
}
voidshow()
{
cout<}
virtualvoidchange()=0;
};
classRun50:
publicSports{
public:
Run50(inti,char*n):
Sports(i,n)
{}
voidchange()
{
if(score<=6.50)strcpy(grade,"优秀");
elseif(score<=6.70)strcpy(grade,"良好");
elseif(score<=7.10)strcpy(grade,"及格");
elsestrcpy(grade,"不及格");
}
};
classRun100:
publicSports{
public:
Run100(inti,char*n):
Sports(i,n)
{}
voidchange()
{
if(score<=13.10)strcpy(grade,"优秀");
elseif(score<=13.70)strcpy(grade,"良好");
elseif(score<=14.90)strcpy(grade,"及格");
elsestrcpy(grade,"不及格");
}
};
classRun1000:
publicSports{
public:
Run1000(inti,char*n):
Sports(i,n)
{}
voidchange()
{
if(score<=203.00)strcpy(grade,"优秀");
elseif(score<=213.00)strcpy(grade,"良好");
elseif(score<=233.00)strcpy(grade,"及格");
elsestrcpy(grade,"不及格");
}
};
classRun1500:
publicSports{
public:
Run1500(inti,char*n):
Sports(i,n)
{}
voidchange()
{
if(score<=323.00)strcpy(grade,"优秀");
elseif(score<=337.00)strcpy(grade,"良好");
elseif(score<=365.00)strcpy(grade,"及格");
elsestrcpy(grade,"不及格");
}
};
voidmain()
{
Sports*s;
intit;
cout<<"请输入项目(50/100/1000/1500):
";cin>>it;
charna[20];
cout<<"请输入姓名:
";cin>>na;
if(it==50){Run50r50(it,na);s=&r50;s->change();s->show();}
elseif(it==100){Run100r100(it,na);s=&r100;s->change();s->show();}
elseif(it==1000){Run1000r1000(it,na);s=&r1000;s->change();s->show();}
elseif(it==1500){Run1500r1500(it,na);s=&r1500;s->change();s->show();}
else{cout<<"输入项目错误\n";exit(0);}
}
8.4实验指导
8.4.1派生类的定义与使用:
设计一个程序求三角函数的值。
#include
#include
classTrigonometric{
protected:
doublearc;
doublevalue;
public:
Trigonometric(intt)
{
arc=t%360*3.14159/180;
value=0;
}
};
classSine:
publicTrigonometric{
public:
Sine(intt):
Trigonometric(t)
{}
doublef1(doublex,intn)
{
doublet=1;
for(inti=0;it*=x;
returnt;
}
intf2(intn)
{
if(n==0||n==1)return1;
elsereturnn*f2(n-1);
}
voidfunction()
{
inti=1,k=1;
doublet;
do{
t=k*f1(arc,2*i-1)/f2(2*i-1);
value+=t;
i++;
k*=-1;
}while(fabs(t)>=1e-6);
}
voidshow()
{
cout<<"sin("<}
};
voidmain()
{
intd;
cout<<"请输入度数:
";
cin>>d;
Sinesin(d);
sin.function();
sin.show();
}
8.4.2虚函数实现运行多态性:
设计一个程序判断某人是否为优秀教师或优秀学生。
#include
classPeople{
protected:
charcategory[20];//人员类别
charname[10];//姓名
intnum;//分数或论文数
intresult;//结论,1为优秀,0为不优秀
public:
People()
{
cout<<"请输入人员类别:
";cin>>category;
cout<<"请输入姓名:
";cin>>name;
}
voidshow()
{
if(result)cout<elsecout<}
virtualvoidinputnum()=0;
virtualvoidisgood()=0;
};
classStudent:
publicPeople{
public:
voidinputnum()
{
cout<<"请输入分数:
";
cin>>num;
}
voidisgood(){result=(num>90)?
1:
0;}
};
classTeacher:
publicPeople{
public:
voidinputnum()
{
cout<<"请输入论文数:
";
cin>>num;
}
voidisgood(){result=(num>5)?
1:
0;}
};
voidmain()
{
People*p;
Students;
p=&s;
p->inputnum();p->isgood();p->show();//A
Teachert;
p=&t;
p->inputnum();p->isgood();p->show();//B
}