- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第八章 多态1.单选题(1).下列关于运算符重载的描述中,( D )是正确的。(A) 可以改变参与运算的操作数个数(B) 可以改变运算符原来的优先级(C) 可以改变运算符原来的结合性(D)不能改变原运算符的语义(2).下列函数中,不能重载运算符的函数是( b )。(A) 成员函数(B) 构造函数(C)普通函数 (D) 友员函数(3).要求用成员函数重载的运算符是( A )。(A) =(B) == (C) =(D) ++(4).要求用友员函数重载的运算符是( C )。(A) =(B) [] (C) (D)()(5).在C++中,要实现动态联编,必须使用(D)调用虚函数。(A)类名(B) 派生类指针(C) 对象名(D) 基类指针(6).下列函数中,不能说明为虚函数的是( C )。(A) 私有成员函数(B) 公有成员函数(C) 构造函数(D) 析构函数(7).在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值( A )。(A)相同(B)不同(C) 相容(D)部分相同(8).C++中,根据(D)识别类层次中不同类定义的虚函数版本。(A) 参数个数(B) 参数类型(C) 函数名(D) this指针类型(9).虚析构函数的作用是(C)。(A) 虚基类必须定义虚析构函数(B) 类对象作用域结束时释放资源(C)delete动态对象时释放资源(D) 无意义(10).下面函数原型中,( B )声明了fun为纯虚函数。(A)void fun()=0;(B) virtual void fun()=0;(C)virtual void fun();(D) virtual void fun(){ };(11).若一个类中含有纯虚函数,则该类称为(C)。(A) 基类(B) 纯基类(C) 抽象类(D) 派生类(12).假设Aclass为抽象类,下列正确的说明语句是(B)。(A)Aclassfun(int ) ; (B) Aclass* p ;(C)int fun( Aclass ) ;(D) AclassObj ;2.在C++中,使用类体系依靠什么机制实现程序运行时的多态?【解答】在C++中,基类指针可以指向派生类对象,以及基类中拥有虚函数,是支持多态性的前提。程序通过用同一个基类指针访问不同派生类的虚函数重载版本实现程序运行时的多态。C++的虚特性负责自动地在程序运行时把基类指针的关联类型转换成当前指向对象的派生类类型。另外,抽象类机制提供了软件抽象和可扩展性的手段,实现运行时的多态性。3.如果一个类的虚函数被声明为私有成员函数,会有语法错误吗?当它作为基类时,可以在应用类体系时实现动态联编吗?请你验证一下。【解答】没有语法错误。但在应用类体系时无法实现动态编联和多态。因为私有成员函数只在类内可见,在类外无法调用,无法在类外通过基类指针实现多态。程序略。4.虚函数和纯虚函数的区别是什么?【解答】虚函数定义时冠以关键字virtual,本身有实现代码,作用是引导基类指针根据指向对象调用类体系中不同重载版本函数。纯虚函数是指在说明时代码“为0”的虚函数,即纯虚函数本身并没有实现代码,必须通过它的派生类定义实现版本。5.阅读下列程序,写出运行结果。#include iostreamusing namespace std;class T{ public : T() { a = 0; b = 0; c = 0; }T( int i, int j, int k ) { a = i; b =j; c = k; } void get( int i, int j, int k ) { i = a; j = b; k = c; }T operator* ( T obj ); private:int a , b , c;};T T::operator* ( T obj ){ T tempobj; tempobj.a = a * obj.a; tempobj.b = b * obj.b; tempobj.c = c * obj.c; return tempobj;}int main(){ T obj1( 1,2,3 ), obj2( 5,5,5 ), obj3; int a , b , c; obj3 = obj1 * obj2; obj3.get( a, b, c ); cout( obj1*obj2 ): a = a\tb = b\tc = c\tendl; (obj2*obj3).get( a, b, c ); cout( obj2*obj3 ): a = a\tb = b\tc =
文档评论(0)