c++多态性相关习题.doc_第1页
c++多态性相关习题.doc_第2页
c++多态性相关习题.doc_第3页
c++多态性相关习题.doc_第4页
c++多态性相关习题.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

多态性10.2 典型例题分析与解答例题1:指出下列对定义重载函数的要求中,哪些是错误的提法。A要求参数的个数不同。B.要求参数中至少有一个类型不同。C求函数的返回值不同。D.要求参数的个数相同时,参数类型不同。答案: C例题3:下面关于友元的描述中,错误的是()。A.友元函数可以访问该类的私有数据成员B.一个类的友元类中的成员函数都是这个类的友元函数C.友元可以提高程序的运行效率D.类与类之间的友元关系可以继承答案:D例题4:下述静态成员的特性中,()是错误的。A.静态成员函数不能利用this指针B.静态数据成员要在类体外进行初始化C.引用静态数据成员时,要在静态数据成员名前加和作用域运算符D.静态数据成员不是所有对象所共有的答案:D例题5:关于虚函数的描述中,()是正确的。A.虚函数是一个静态成员函数B.虚函数是一个非成员函数C.虚函数既可以在函数说明时定义,也可以在函数实现时定义D.派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型参考答案:D例题11:分析下列程序的输出结果。#include class Apublic:A() coutAs cons.endl; virtual A() coutAs des.endl; virtual void f() coutAs f().endl; void g() f(); ;class B : public Apublic:B() f(); coutBs cons.endl; B() coutBs des.endl; ;class C : public Bpublic:C() coutCs cons.endl; C() coutCs des.endl; void f() coutCs f().g();delete a;运行结果:As cons.As f().Bs cons.Cs cons.Cs f().Cs des.Bs des.As des.103 教材习题解答1选择题(1)下列关于动态联编的描述中,错误的是()。A动态联编是以虚函数为基础B动态联编是运行时确定所调用的函数代码的C动态联编调用函数操作是指向对象的指针或对象引用D动态联编是在编译时确定操作函数的答案:D(2)关于虚函数的描述中,正确的是()。A虚函数是一个静态成员函数B虚函数是一个非成员函数C虚函数即可以在函数说明定义,也可以在函数实现时定义D派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型答案:D(3)下面4个选项中,()是用来声明虚函数的。AvirtualBpublicCusingDfalse答案:A(4)编译时的多态性可以通过使用()获得。A虚函数和指针B重载函数和析构函数C虚函数和对象D虚函数和引用答案:A(5)关于纯虚函数和抽象类的描述中,错误的是()。A纯虚函数是一种特殊的虚函数,它没有具体的实现B抽象类是指具体纯虚函数的类C一个基类中说明有纯虚函数,该基类派生类一定不再是抽象类D抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出答案:B(6)下列描述中,()是抽象类的特征。A可以说明虚函数B可以进行构造函数重载C可以定义友元函数D不能说明其对象答案:D(7)以下()成员函数表示虚函数。Avirtual int vf(int);Bvoid vf(int)=0;Cvirtual void vf()=0;Dvirtual void vf(int) ;答案:D(8)如果一个类至少有一个纯虚函数,那么就称该类为( A)。A抽象类B虚函数C派生类D以上都不对答案:A(9)要实现动态联编,必须通过()调用虚函数。A对象指针B成员名限定C对象名D派生类名答案:A(10)下面描述中,正确的是(A)。Avirtual可以用来声明虚函数B含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类C即使基类的构造函数没有参数,派生类也必须建立构造函数D静态数据成员可以通过成员初始化列表来初始化答案:A2什么叫做多态性?在C+语言中是如何实现多态的?答:多态是指同样的消息被不同类型的对象接收时导致完全不同的行为,是对类的特定成员函数的再抽象c十+支持的多态有多种类型重载(包括函数重载和运算符重载)和虚函数是其中主要的方式3什么叫做抽象类?抽象类有何作用?抽象类的派生类是否一定要给出纯虚函数?答:带有纯虚函数的类是抽象类抽象类的主要作用是通过它为一个类族建立一个公共的接口使它们能够更有效地发挥多态特性。抽象类声明了一组派生类共同操作接口的通用语义面接口的完整实现,即纯虚函数的函数体,要由派生类自己给出但抽象类的派生类并非一定要给出纯虚函数的实现如果派生类没有给出纯虚函数的实现,这个派生类仍然是一个抽象类4声明一个参数为整型、无返回值、名为fun1的虚函数。答:virtual void fnl(int);5在C+语言中,能否声明虚构造函数?为什么?能否声明虚析构函数?有何用途?答:在C+-中不能声明虚构造函数多态是不同的对象对同一消息有不同的行为特性虚函数作为运行过程中多态的基础,主要是针对对象的,面构造函数是在对盘产生之前运行的,因此虚构造函数是没有童义的在C+中可以声明虚析构函数析构函数的功能是在该类对象消亡之前进行一些必要的清理工作,如果一个类的析构函数是虚函数,那么,由它派生而来的所有子类的析构函数也是虚函数析构函数设置为虚函数之后,在使用指针引用时可以动态联编,实理运行时的多态,保证使用基类的指针就能够谓用适当的析构函数指针对不同的对象进行清理工作10声明一个Shape抽象类,在此基础上派生出Rectangle和Circle类,二者都有GetArea( )函数计算对象的面积,GetPerim( )函数计算对象的周长。解答:#include#includeclass shape public:virtual void getarea()=0;virtual void getperim()=0;class rectangle:public shapeint a,b,c;double s,p;public:rectangle(int a1,int b1,int c1)a=a1;b=b1;c=c1;void getperim()p=a+b+c; cout周长 pendl;void getarea()p=(a+b+c)/2.0;s=sqrt(p*(p-a)*(p-b)*(p-c);cout面积sendl;class circle :public shapefloat r,s,p;public:circle(float r1)r=r1;void getperim()p=2*r*3.1415926;cout周长 pendl;void getarea()s=r*r*3.1415926;cout面积sgetarea();p-getperim();void main() shape *p;rectangle a(3,4,5);circleb(10);p=&a;show(p);p=&b;show(p);10.4补充习题 (6)有如下类的定义。空格处的语句是()。class MyClasspublic:MyClass(int a = 0, int b = 0)X = a;Y = b;void Change() constX -= 10;Y += 10;private:()int X, Y;AstaticBconstCmutableD不需要填入内容(7)编译时的多态性可以通过使用()获得。A虚函数和指针B重载函数和析构函数C虚函数和对象D虚函数和引用2填空(1).单目运算符作为类成员函数重载时形参;双目运算符作为重载时需声明其右操作数,作为重载时需声明全部操作数。 10.根据给定的程序执行结果,将下列程序补充完整。#include class Basepublic:Base(int i) b=i;(1)protected:int b;class Derive1:public Basepublic:(2)void Print()coutDerive1s Print() called.Print();void main()(5)fun(d1);fun(d2);程序的执行结果如下:Derive1s Print() called.Derive2s Print() called.#includeclass Basepublic:Base(int i) b=i;virtual void Print();protected:int b;class Derive1:public Basepublic:Derive1():Base(1);void Print()coutDerive1

温馨提示

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

评论

0/150

提交评论