1. 静态编联又叫做( )。 A.延迟编联 B.早期编联 C.晚期编联 D.以上三者均可 答题: A. B. C. D. (已提交) -->参考答案:B 问题解析: |
2. 说明虚函数的关键字是( )。 A.inline B.virtual C.define D.static 答题: A. B. C. D. (已提交) -->参考答案:B 问题解析: |
3. 下列函数原型中,( )是纯虚函数。 A.virtual void vf(int); B.void vf(int)=0; C.virtual void vf()=0; D.virtual void vf(int){} 答题: A. B. C. D. (已提交) -->参考答案:C 问题解析: |
思考题
1、在C++中,使用类体系依靠什么机制实现程序运行时的多态?
【解答】
在C++中,基类指针可以指向派生类对象,以及基类中拥有虚函数,是支持多态性的前提。程序通过用同一个基类指针访问不同派生类的虚函数重载版本实现程序运行时的多态。C++的虚特性负责自动地在程序运行时把基类指针的关联类型转换成当前指向对象的派生类类型。
另外,抽象类机制提供了软件抽象和可扩展性的手段,实现运行时的多态性。
2、如果一个类的虚函数被声明为私有成员函数,会有语法错误吗?当它作为基类时,可以在应用类体系时实现动态联编吗?请你验证一下。
【解答】
没有语法错误。但在应用类体系时无法实现动态编联和多态。因为私有成员函数只在类内可见,在类外无法调用,无法在类外通过基类指针实现多态。
程序略。
3、虚函数和纯虚函数的区别是什么?
【解答】
虚函数定义时冠以关键字virtual,本身有实现代码,作用是引导基类指针根据指向对象调用类体系中不同重载版本函数。
纯虚函数是指在说明时代码“为0”的虚函数,即纯虚函数本身并没有实现代码,必须通过它的派生类定义实现版本。
4、一个非抽象类的派生类是否可以为抽象类?利用例9-11进行验证,从Hex_type类派生一个Hex_format类,其中包含一个纯虚函数Show_format,然后定义Hex_format的派生类定义实现Show_format。
【解答】
一个非抽象类的派生类可以为抽象类,即在派生类中定义了纯虚函数。
|