继承与多态性习题参考答案

  • 格式:doc
  • 大小:131.00 KB
  • 文档页数:11

继承与多态性习题参考答案————————————————————————————————作者:————————————————————————————————日期: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 C8.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) 2 1 (2) 0 58.(1) 100 200 300 30 (2) 10 100 (3) 20 200 9.(1) 5 10 (2) end. (3) 20 1010.(1) classA classB (2) end. (3) ~classB ~classA 11.(1) 10 (2) build B (3) build C (4) release A12.(1) class B (2) class C (3) class D (4) 513.(1) 5 5 (2) 20 2014.(1) 10 (2) 10 2015.(1) 1 (2) 3 (3) 5 (4) 100 1016.(1) B::f() (2) B::fun() (3) A::f() (4) B::fun()17.(1) 姓名陈涛年薪6.8万元。

(2) 姓名李原(3) 姓名李原月工资4000元18.(1) 110 (2) 222019.(1) protected 或public (2) Base1(s1),Base2(s2) 或Base2(s2),Base1(s1)(3) Base1::str (4) test.print()20.(1) virtual void show()=0 (2) C(int,int,int) (注:参数可有任一名称)(3) b1(y) (4) &t8.3.3 编程题1.求长方形的面积和长方体的表面积、体积#include<iostream.h>class Rectangle{protected:float L; // 长方形的长float W; // 长方形的宽float area; // 长方形的面积public:Rectangle(float L1,float W1){L=L1;W=W1;}void function() { area=L*W; }void show(){cout<<"长为"<<L<<",宽为"<<W<<"的长方形面积为"<<area<<endl;}};class Cuboid:public Rectangle{float H; // 长方体的高float volume; // 长方体的体积public:Cuboid(float a,float b,float c):Rectangle(a,b){ H=c; }void function() { area=(L*W+L*H+W*H)*2; }void fun() { volume=L*W*H; }void show(){cout<<"长为"<<L<<",宽为"<<W<<",高为"<<H<<"的长方体表面积为"<<area<<",体积为"<<volume<<endl;}};void main(){Rectangle r(2,3); r.function(); r.show();Cuboid c(2,3,4); c.function(); c.fun(); c.show();}2.产生并输出圆桌信息#include<iostream.h>#include<string.h>class Circle{protected:double radius;double area;public:Circle(double r) { radius=r; }};class Table{protected:double height;public:Table(double h) { height=h; }};class Roundtable:public Table,public Circle{char *color;public:Roundtable(double h,double r,char c[]):Circle(r),Table(h) {color=new char[strlen(c)+1];strcpy (color, c);}void fun() { area=3.14*radius*radius; }void show(){cout<<"高度:"<<height<<"米"<<endl;cout<<"面积:"<<area<<"平方米"<<endl;cout<<"颜色:"<<color<<endl;}~Roundtable() { delete []color; }};void main(){Roundtable rt(0.75,1.1,"黑色");rt.fun(); rt.show();}3.计算企业的经营税#include<iostream.h>#include<string.h>class Tax{protected:char name[50]; // 企业名称double income; // 经营收入double taxes; // 税金public:Tax(char *n,double in){strcpy(name,n);income=in;}virtual void fun()=0;void show(){cout<<name<<"的经营收入为"<<income<<"万元,税金为"<<taxes<<"万元\n";}};class Service:public Tax{public:Service(char *n,double in):Tax(n,in){ }void fun(){taxes=income*5/100;}};class Fabrication:public Tax{public:Fabrication(char *n,double in):Tax(n,in){ }void fun(){taxes=income*17/100;}};void print(Tax &t) { t.fun(); t.show(); }void main(){char name[50];int income;cout<<"请输入服务性企业名称:"; cin>>name;cout<<"请输入经营收入(万元):"; cin>>income;Service s(name,income); print(s);cout<<"请输入生产性企业名称:"; cin>>name;cout<<"请输入经营收入(万元):"; cin>>income;Fabrication f(name,income); print(f);}4.把原始体育成绩转换为等第#include<iostream.h>class Sports{protected:int item; // 项目char name[20]; // 姓名double score; // 原始成绩char grade[10]; // 评定等第public:Sports(int i,char *n){item=i;strcpy(name,n);cout<<"请输入原始成绩:";cin>>score;}void show(){cout<<name<<"的"<<item<<"米成绩为"<<score<<"秒,等第为"<<grade<<endl;}virtual void change()=0;};class Run50:public Sports{public:Run50(int i,char *n):Sports(i,n){ }void change(){if(score<=6.50)strcpy(grade,"优秀");else if(score<=6.70)strcpy(grade,"良好");else if(score<=7.10)strcpy(grade,"及格");else strcpy(grade,"不及格");}};class Run100:public Sports{public:Run100(int i,char *n):Sports(i,n){ }void change(){if(score<=13.10)strcpy(grade,"优秀");else if(score<=13.70)strcpy(grade,"良好");else if(score<=14.90)strcpy(grade,"及格");else strcpy(grade,"不及格");}};class Run1000:public Sports{public:Run1000(int i,char *n):Sports(i,n){ }void change(){if(score<=203.00)strcpy(grade,"优秀");else if(score<=213.00)strcpy(grade,"良好");else if(score<=233.00)strcpy(grade,"及格");else strcpy(grade,"不及格");}};class Run1500:public Sports{public:Run1500(int i,char *n):Sports(i,n){ }void change(){if(score<=323.00)strcpy(grade,"优秀");else if(score<=337.00)strcpy(grade,"良好");else if(score<=365.00)strcpy(grade,"及格");else strcpy(grade,"不及格");}};void main(){Sports *s;int it;cout<<"请输入项目(50/100/1000/1500):"; c in>>it;char na[20];cout<<"请输入姓名:"; c in>>na;if(it==50) { Run50 r50(it,na); s=&r50; s->change(); s->show(); }else if(it==100) { Run100 r100(it,na); s=&r100; s->change(); s->show(); }else if(it==1000) { Run1000 r1000(it,na); s=&r1000; s->change(); s->show(); } else if(it==1500) { Run1500 r1500(it,na); s=&r1500; s->change(); s->show(); } else { cout<<"输入项目错误\n"; exit(0); }}8.4 实验指导8.4.1 派生类的定义与使用:设计一个程序求三角函数的值。