《C++语言与面向对象的设计》习题及参考解答(7)

2020-06-05 09:12

Spades-7 Clubs-5 Clubs-12 Hearts-11 Clubs-10 Hearts-8 Clubs-7 Clubs-8 The Second deal:

Clubs-12 Hearts-7 Diamonds-1 Hearts-6 Spades-2 Diamonds-13 Diamonds-2 Clubs-1 Spades-3 Spades-9 Diamonds-8 Diamonds-7 Clubs-3 Spades-12 Spades-8 Spades-6 Spades-4 Clubs-7 Hearts-13 Clubs-6 Clubs-11 Hearts-5 Spades-11 Clubs-4 Diamonds-5 Diamonds-9 Clubs-9 Clubs-5 Hearts-1 Diamonds-4 Diamonds-10 Hearts-10 Hearts-8 Spades-10 Clubs-10 Spades-13 Clubs-2 Diamonds-11 Diamonds-12 Clubs-8 Spades-7 Hearts-4 Spades-1 Hearts-2 Hearts-3 Hearts-9 Hearts-11 Diamonds-6 Clubs-13 Spades-5 Hearts-12 Diamonds-3 习题8参考答案

8.1 选择填空:(1) 派生类的对象对它的基类成员中( )是可以访问的. A.公有继承的保护成员; B.公有继承的私有成员; C.公有继承的公有成员; D.私有继承的公有成员.

(2) 下面关于派生类的描述中,( )是错的。

A.一个派生类可以作为另一个派生类的基类; B.派生类至少有一个基类;

C.派生类的成员除了它自己的成员外,还包含了它的基类的成员. D.派生类中继承的基类成员的访问权限到派生类保持不变。 (3)派生类的构造函数的成员初始化列表中,不能包含( ) A.基类的构造函数调用; B.派生类对象成员的初始化;

C.基类对象成员的初始化; D.派生类中一般数据成员的初始化. (4)设置虚基类的目的是( )

A.减少目标代码;B.消除二义性;C.提高运行效率; D.简化程序。 (5) 带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化( )

A.一次; B.二次; C.多次; D.与虚基类下面的派生类个数有关. 答案:(1)C (2)D (3) C (4)B (5)A 8.2 分析程序的运行结果:(1) #include { class A int a,b;

26

public: void f1( ){move(3,5);} A(int x,int y){a=x;b=y;} void f2( ){A::print( );} void move(int xx,int yy){ a+=xx ; b+=yy ;} }; void void main() print( ){cout<<”(“< { class X cout<<\{ f(); public: } void f(){cout<<\void main() }; { class Y: public X X a; { Y b; public: a.f(); void f(){cout<<\ b.f(); void g(); b.g(); }; } void Y::g()

程序输出:xxxxxxx yyyyyyy ggggggg yyyyyyy (3)

#include void show(){ cout< }; class string class de_string : public string { {

char *name; int age; int length; public: public: de_string (char *str, int age): string(str)

string ( char *str ) { de_string::age=age; } { void show () length=strlen(str); { name=new char[length +1]; string::show(); strcpy (name,str); cout<<\ } }

27

}; ptr1->show(); void main() ptr1 =&s2 ; { ptr1->show(); string s1 (\ ptr2=&s2; de_string s2(\ ptr2->show(); ptr1 =&s1; }

程序输出:Smith Jean Jean

the age is: 2

分析:公有继承下的赋值兼容规则:指向基类的指针可以用来指向派生类的对象。

用指向基类的指针访问派生类对象时,只能访问到派生类对象从基类中继承到的成员,面访问不到派生类新增添的成员。这种限制既对数据成员成立,也对函数成员成立。 第一个ptr1->show();输出Smith 第二个ptr1->show();输出Jean

然后,ptr2->show();输出Jean和2

9.3 分析下列程序的运行结果,指出派生类中area()函数重载的不同功能:#include #include Point p1, p2, p3; class Point public: { triangle(int a1,int b1,int a2,int b2,int a3, int double x,y; b3):Point(0,0), public: p1(a1,b1), p2(a2,b2), p3(a3,b3){} Point(double a, double b){x=a; y=b;} double area() double area(){return 0;} { double distance(Point&, Point&); double s,s1,s2,s3; }; s1=distance(p1,p2); double Point::distance(Point& p1, Point& p2) s2=distance(p1,p3); { s3=distance(p2,p3);

return if sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p((s1!=0)&&(s2!=0)&&(s3!=0)&&(s1+s2>s3)) 2.y)); { } s=(s1+s2+s3)/2; class circle: public Point return { sqrt(s*(s-s1)*(s-s2)*(s-s3)); int r; } public: else return 0; circle(int rad, int a, int b):Point(a,b) {r=rad;} } double area(){return 3.1416*r*r;} }; }; void main() class triangle:public Point { { circle c1(2, 3, 4), c2(5, 0, 0);

28

triangle t1(-4, 0, 4, 0, 0, 3); cout<

程序输出:12.5664 78.54 12

8.4上机实验题:定义一个大学生类student,函数私有数据成员:姓名、学号、校名,并为它定义带参数的构造函数、参数带缺省值的构造函数和输出数据成员值的print()公有成员函数,另定义研究生类,它以公有继承方式派生于类student,新增加“研究方向、导师名”两个私有数据成员,并定义带参数的构造函数和输出研究生数据的print()公有成员函数。在main()函数中定义基类和派生类对象,对类进行测试。

char *directorname; 解:#include

#include public: class Student GraStudent(); { GraStudent(char *pn, char *ps, char *pun, char char *name; *psp, char *pd); char *stunum; void print(); char *uniname; }; public: GraStudent::GraStudent(char *pn,char *ps, char Student(); *pun,char *psp, Student(char *pn, char* ps, char* pu); char *pd): Student(pn, void print(); ps, pun) }; { Student::Student(char *pn, char *ps, char *pu) special=new char[strlen(psp)+1]; { strcpy(special, psp); name=new char[strlen(pn)+1]; directorname=new char[strlen(pd)+1]; strcpy(name, pn); strcpy(directorname, pd); stunum=new char[strlen(ps)+1]; } strcpy(stunum, ps); void GraStudent::print() uniname=new char[strlen(pu)+1]; { strcpy(uniname, pu); Student::print(); } cout<<\void Student::print() cout<<\is { \ cout<<\} cout<<\void main() cout<<\{ endl; Student stu1(\} University\class GraStudent:public Student stu1.print(); { GraStudent char *special; gstu(\

29

r\}

gstu.print();

程序运行输出结果如下: name=Li StuNum=1600240 StuNum=1600141 universty_name=XJU universty_name=XJU special is Compute name=Wang director is Zhang

8.5 上机实验题:建立普通的基类building,用于存储一座楼房的层数、房间数和它的总平方面积。建立有派生类house,继承building,并存储卧室和浴室的数量。另建立派生类office,继承building,存储工作人员和电话的数目。设计程序,并测试上述三个类。 参考程序:

#include j):Building(m,n,s) class Building { { cout<<\constructer int layernumber; called.\ int housenum; bedroomnum=i; float sumarea; bathroomnum=j; public: } Building(); void print() Building(int m,int n,float s) { { Building::print(); cout<<\ cout<<\ layernumber=m;housenum=n;sumarea=s; l; } void print() cout<<\ { dl; cout<<\is a } \}; cout<<\are \class Office:public Building houses\{ cout<<\total area is int stuffnum; \ int telnum; } public: }; Office(); class House:public Building Office(int m,int n,float s,int i,int { j):Building(m,n,s) int bedroomnum; { int bathroomnum; cout<<\public: stuffnum=i;telnum=j; House(); } House(int m,int n,float s,int i,int void print()

30


《C++语言与面向对象的设计》习题及参考解答(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:回复买家好评模板

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: