第4章继承与派生习题参考答案
一、选择题(共30分,每题1分)
1 D 11 D 21 D
2 C 12 C 22 C 3 C 13 B 23 D 4 B 14 A 24 C 5 D 15 A 25 C 6 A 16 A 26 D 7 B 17 B 27 B 8 B 18 B 28 A 9 D 19 A 29 B 10 C 20 C 30 C 二、填空题(共17分,每空1分)
1. 基类
2. (1)派生类 (2)派生类中子对象类 (3)基类 3. (1)c1、b2、b3、A2、A3 (2)c2 (3)c3 4. (1)基类 (2)派生类 5. ~A() {cout<<\6. A(aa),c(aa+1) 或 c(aa+1), A(aa) 7. (1)公有成员 (2)公有和保护成员
8. (1)保护 (2)成员函数 (3)不可访问
三、改错题(共6分,每题2分)
1. 保护继承方式使基类的public成员在派生类中的访问属性变为protected,所以派生类Rectangle的对象r不能直接访问基类的成员函数move()、getx()和gety()。其改正方法有两种:
1)将Rectangle的继承方式改为公有继承class Rectangle: public Point;
2)在Rectangle类中重定义move(),getx()和gety()函数,覆盖基类的同名函数。 void Rectangle::move(intxoffset,intyoffset){Point::move(xoffset,yoffset);} void Rectangle::getx(){return Point::getx();} void Rectangle::gety(){return Point::gety();}
2. 分析:类A、B中有同名公有数据成员x和同名成员函数display(),在主函数中访问对象myc的数据成员x是无法确定是访问从A中继承的还是从B中继承的x;调用成员函数也是如此,无法确认是调用类A中的还是类B中的,产生二义性。 改正方法,可以用作用域区分符加以限定,如改成: myc.A::x=10; myc.A::display();
或 myc.B::x=10; myc.B::display(); 3.
#include
};
int main()
{ MyClass *obj=new MyClass(10);
cout<<\ return 0; }
public:
int value;
Member(int val):value(val){ } };
class MyClass{ Member _m; public : MyClass(int val):_m(val){ } int getValue() const { return _m.value;}
四、看程序写结果(共24分,每题3分)
1.
n=8,m=13,p=24 j=8,i=13,aa.i=24
2.
3.
4.
5.
6. 输出: 21
7. 输出: ABA~B~A~A
8. 输出: PDS
五、编程题(共23分)
1.定义一个国家基类Country,包含国名、首都、人口等属性,派生出省类Province,增加省会城市、人口数量属性。
#include
public: Country(char cn[],char ct[],int pc) { strcpy(countryName,cn); strcpy(captal,ct); personCount=pc; }
void show1() { cout<<\ cout< class Province :public Country { public: Province(char cn[],char ct[],int pc,char ci[],int propc):Country(cn,ct,pc) { strcpy(city,ci); proPersonCount=propc; } void show2() { show1(); cout<<\ cout< void main() { Province p(\美国\华盛顿\洛杉矶\ p.show2(); } 2. 建立一个基类Building类,用来存储楼房的层数、房间数和总面积,由基类派生出教学楼TeachBuilding类和宿舍楼DormBuilding类,教学楼增加教室数,宿舍楼类增加宿舍数、容纳学生总人数。编写应用程序,建立教学楼对象和宿舍楼对象,并输出它们的有关数据信息。 程序代码: #include class Building{ public: Building(int f,int r,double a) { floors=f; rooms=r; area=a; } protected: int floors; int rooms; double area; }; class TeachBuilding:public Building{ public: TeachBuilding (int f,int r,double a,int cr):Building(f,r,a){ classrooms=cr; } void show() { cout<<\ rooms=\ area=\ <<\ classrooms=\ } private: int classrooms; }; class DormBuilding:public Building{ public: DormBuilding (int f,int r,double a,int d,int sc) :Building(f,r,a) { dormitories =d; studcount =sc; } void show() { cout<<\ rooms=\ area=\ <<\ dormitories=\ studcount=\ < int dormitories; int studcount; }; int main() { TeachBuilding TB(6, 80,200,35); TB.show(); DormBuilding DB(6, 80,200,35,300); DB.show(); return 0; } 3.定义一个Point类,派生出矩形类Rectangle和圆类Circle,计算各派生类对象的面 搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新资格考试认证第4章 继承与派生习题 参考答案 全文阅读和word下载服务。
相关推荐: