《「面向对象程序设计试题(二)」.pdf》由会员分享,可在线阅读,更多相关《「面向对象程序设计试题(二)」.pdf(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 姓名 本试卷满分 100 分;请将答案写在答题纸上,写明题号,不必抄题,字迹工整、清晰;请在答题纸和试题纸上都写上你的班级,学号和姓名,交卷时请将试题纸、答题纸和草纸 一并交上来。一、单选题(共 10 分,每题 1 分)1.+中解决命名冲突的机制是:(A)虚基类 (B)虚函数()函数重载(D)名字空间(namespae)2 若类 A 的一个对象所占的内存空间中包含虚函数表的入口地址,则:(A)类 A 不能有静态数据成员 (B)类中公有的成员函数一定是虚的()类 A 中至少有一个成员函数是虚的 (D)类 A 的析构函数一定是虚的 3任意一个类,析构函数的个数最多是:(A)不限个数 (B)1 (
2、C)()3 4 下列关于 this 指针的说法,哪个是正确的:(A)ths 指针一定指向常量型数据 ()ts 指向的数据不可更改(C)静态成员函数中也可以访问 tis 指针 (D)this 指针本身可直接作为成员函数的返回值 5.在类定义中,为说明成员的访问权限,prvat,proeced,pulic 可以出现次数为:(A)次数没有具体限定 (B)每种至多一次(C)public 至少一次 (D)每种至少一次 6.下面哪种定义方式是正确的,并且使得 p 可以作为函数 void(A*const p);的实参:()*p new;(B)A a;A*=a;(C)cost*p=nw A;(D)a;cons
3、t A*p=a;7 obj 是类 A 的一个对象,执行语句 const&a=obj;,则下列说法正确的是:(A)类 A 的拷贝构造函数会被调用 (B)类的赋值函数会被调用 (C)&A 的值就是&ob (D)语句 o.f();等价于语句 aAf();8.下面关于访问类 A 的私有数据成员的说法,错误的是:(A)类的友元函数可以访问类 A 的私有成员。(B)类的友元类中的非静态成员函数可以访问类A 的私有成员。(C)类的嵌套类中的非静态成员函数可以访问类 A 的私有成员。(D)类 A 中的非静态成员函数可以访问类 A 的私有成员。9 类 A 中有唯一的一个成员函数 f,且 f 是公有的静态或非静态
4、成员函数,对于类的一个对象 a,执行语句 af(100);成功,那么 f 的函数原型不可以是:(A)A&f(it,it=50);(B)vi f(i);(C)cost A*f(const int);(D)A f(onst int);.下面关于类的成员函数描述不正确的是:(A)静态成员函数内可以直接访问类的非静态成员数据(B)静态成员函数内可以直接访问类的静态成员数据()非静态成员函数可以直接访问类的非静态成员数据(D)非静态成员函数可以直接访问类的静态成员数据 二、判断正误,对于你认为错误的论述,说明原因或举出反例。(每题 2 分,共0 分)1.重载流操作符 时,如果第一个参数的类型为 otem
5、 和 itrem,那么这个重载函数既可以用于标准输入输出流,也可以用于文件流上。2.在同一个类中,可以定义重载的成员函数 void(int);和 vtl void f(int);。3.抽象类不会产生实例,所以不需要有构造函数。4.类 A 有一个非静态的成员函数 f,其函数原型是:vod A:()cnt,则该函数被调用时,一定是通过类 A 或类 A 的某后裔类的一个用 const 修饰符说明的常量对象调用的。5.异常必须在其产生的当前函数中捕获,而不能在外层函数中捕获该异常。6.只要程序中没有 A 1=a2;和 A a1(a);形式的代码,类 A 的拷贝构造函数就不会被调用。7.在 prtect
6、e继承方式下,派生类对象的指针不能直接转换成指向基类对象的指针。8.若静态成员函数中调用了一个函数,那么 f 一定不是虚函数。9.若要实例化一个含有引用型数据成员的类,那么只能使用构造函数初始化列表来初始化该数据成员。10.构造函数的函数体中,不能使用etun 语句;但在实现该类的自动类型转化函数时,必须有 rtu 语句。三、回答下列各题(每题分,共 20 分)1.举例说明 sttic 关键字的用法和相应目的(至少 3 种)。2.举例说明类的数据成员在哪些情况下必须在初始化列表中进行初始化(至少 3 种)。3.举例说明虚拟继承的作用和目的。4.举例说明成员函数 A&()cost;和成员函数 A
7、&();的区别。5.有类的对象 a,任意给出一种解决方案,使得程序支持下面的表达式:a=10+;四、指出下列程序代码中存在的错误或不足,说明原因。(每题 5 分,共 10 分)1.ilude clas A public:vitl A()virual void f()coutA:()endl;v rt al vo d ()couA:()en;clss B:ubc A plic:vrtual void g()cuB::()nl;virtu l v i ()coutB::k()f();p();pk();delte p;2.#iclud#ncludring.hclass A;lss B:public
8、A clss A publc:A()irtua void output();pb:B(onst char*inf)m_bu=new char2;strcpy(_buf,inf);B()det m_buf;virtu vid uput()ot m_buf;private:cha _bf;voi in()*pa=ew B(hello!);p-output();delte p;五、写出下面程序的运行结果(每题 5 分,共 10 分)#icude lass public:():count(1)vital A()itua*oy()n=0;virtu vd Ot()onst 0;rotected:int cout;;class B:ulic A public:B()-count;Ot();vrua A*Coy()const B*p e(*thi);+cont;reurn p;iual vod u()const cout ou ut();=a-op();1O();delete a;2#inclue clss A ulc:A(int):num(n)Out();(ost A&rhs):(h.nm)Ou();i Out()conl;blic:nt nm;cas B:publc A publc:B(&a):b(a),()oi Out()obj.t();/(const&b)/priat:A obj;;