C++04737 第8章 课后练习题 完整答案.doc_第1页
C++04737 第8章 课后练习题 完整答案.doc_第2页
C++04737 第8章 课后练习题 完整答案.doc_第3页
C++04737 第8章 课后练习题 完整答案.doc_第4页
C++04737 第8章 课后练习题 完整答案.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章一、单项选择题1.A;抽象类至少包含一个虚函数,而且至少包含一个纯的虚函数。课本P1742.B;纯虚函数定义要有关键字virtual、末尾要“=0”、不能有大括号“”请参考P173。二、分析程序题(程序可以直接复制到VC+ 6.0运行)1.分析下面程序的输出结果。#include using namespace std;class baseint x;public:base(int a)x = a;cout base. x endl;base(base& t)x = t.x;cout base copy. x endl;virtual base() /使用虚函数在析构时防止只析构基类而不析构派生类的状况发生cout base. x endl; ;class derived : public baseint y;public:derived(int a, int b) : base(a)y = b;cout derived. y endl;derived(derived& t) : base(t)y = t.y;cout derived copy. y endl;derived() /基类的析构函数cout derived. y endl;void main()/根据赋值兼容规则使用指针base *pb = new derived(52, 54); /派生类对象给指向基类对象的指针赋值base a(*pb);delete pb; /析构函数为虚函数,先调用派生类析构函数程序输出结果:2. 分析下面程序的输出结果。#include using namespace std;class Apublic:virtual void fa() cout A:fa endl; /fa()为虚函数void fb() cout A:fb endl; ;class B : public Apublic:void fa() cout B:fa endl; /由于继承了类A,fa()也为虚函数void fb() cout B:fb fa();pb-fb();pb-fa(); /由于fa()为虚函数,pb调用派生类中的fa()pb-A:fa(); /使用成员名限定,指定pb指向A中的fa()(B*)pb)-fb(); /讲指向A对象的指针pb强制转换成指向B对象的指针程序输出结果:三、查错题(程序可以直接复制到VC+ 6.0运行)下面程序中国的错误,使其结果输出如下:5818,28#include using namespace std; /程序中漏了这句,漏了就不能使用“cout”class baseint m;public:base(int a) m = a; int Getm() return m; virtual void show() cout Getm() endl; ;class derived : public baseint n;public:derived(int a, int b) : base(a) n = b; virtual void show() cout Getm() , n endl; ;void print(base p)/参考课本P171,要产生运行时多态性,应使用指针或引用 p.show(); void main()base A(58);derived B(18,28);/print(A);/print(B);/修改为:print(&A); /传送对象A的地址给print的指针pprint(&B);加上“using namespace std;”后程序输出的结果:,仍不合题意。方案一:使用指针方式,需要将print函数和调用方式一起修改,修改后程序:#include using namespace std; /程序中漏了这句,漏了就不能使用“cout”class baseint m;public:base(int a) m = a; int Getm() return m; virtual void show() cout Getm() endl; ;class derived : public baseint n;public:derived(int a, int b) : base(a) n = b; virtual void show() cout Getm() , n show(); /将p.show()改成p-show()void main()base A(58);derived B(18,28);/print(A);/print(B);/修改为:print(&A); /传送对象A的地址“&A”给print参数pprint(&B);输出结果如下:方案二:参考课本P171,还可以使用引用方式,则只需修改print函数,其他不需要修改,修改如下:#include using namespace std; /程序中漏了这句,漏了就不能使用“cout”class baseint m;public:base(int a) m = a; int Getm() return m; virtual void show() cout Getm() endl; ;class derived : public baseint n;public:derived(int a, int b) : base(a) n = b; virtual void show() cout Getm() , n endl; ;/参考课本P171,要产生运行时多态性,需要使用指针或引用/使用引用方式修改如下:void print(base& p) /将(base p)改成(base& p) p.show(); void main()base A(58);derived B(18,28);print(A);print(B);输出结果如下:四、完成程序题(程序可以直接复制到VC+ 6.0运行) 阅读下面的程序,根据输出结果分别给出基类base和派生类derived中没有定义的内联函数void display(void) const。#include using namespace std; class baseint i;int j;public:base(int I, int J):i(I),j(J) display(); int getI(void)const return i; int getJ(void)const return j; /定义display;class derived : public baseint k;public:derived(int I, int J, int K):base(I,J),k(K) display(); /定义display;void main()base b3(8,9);derived d1(10,20,5);程序输出:i = 8j = 9i = 10j = 20i = 10j = 20k = 5i+k=15j+k=25答 程序的修改和display的定义如下:#include using namespace std; class baseint i;int j;public:base(int I, int J):i(I),j(J) display(); int getI(void)const return i; int getJ(void)const return j; /定义displayvoid display()cout i= i t j= j endl;class derived : public baseint k;public:derived(int I, int J, int K):base(I,J),k(K) display(); /定义disp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论