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