第4章 继承与派生习题 参考答案

更新时间:2023-09-15 09:09:01 阅读量: 资格考试认证 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第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 using namespace std; class Member{

};

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 using namespace std; class Country {

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 using namespace std;

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,计算各派生类对象的面

本文来源:https://www.bwwdw.com/article/xhvh.html

Top