C++面向对象程序设计复习题.docx
- 文档编号:12650046
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:23
- 大小:35.48KB
C++面向对象程序设计复习题.docx
《C++面向对象程序设计复习题.docx》由会员分享,可在线阅读,更多相关《C++面向对象程序设计复习题.docx(23页珍藏版)》请在冰豆网上搜索。
C++面向对象程序设计复习题
一、填空题(10题,共10分)
1.行尾使用注释的开始标记符为//。
2.多行注释的开始标记符和结束标记符分别为/*和*/。
3.用于输出表达式值的标准输出流对象是cout。
4.用于从键盘上为变量输入值的标准输入流对象是cin。
5.在C++程序中包含一个头文件或程序文件的预编译命令为#include。
6.程序中的预处理命令是指以#字符开头的命令。
7.一条表达式语句必须以分号作为结束符。
8.C++语言的类是一种用户自己定义的数据类型,组成这种类型的不仅可以具有数据,而且可以有对数据进行操作的函数,具有这种类型的变量被称为对象。
9.C++支持两种多态性,即编译时的多态性和运行时的多态性、前者通过使用函数重载和运算符重载获得、后者通过使用继承和虚函数获得。
10.在C++中,通过对象名访问一个对象的成员所用的运算符是.,访问一个指针所指向的对象的成员所用的运算符是->。
11.定义类的动态对象数组时,系统只能够自动调用该类的复制/拷贝构造函数对其进行初始化。
12.无论是什么继承方式,派生类的成员不能访问基类private属性的成员。
13.基类的公有成员在派生类中的访问权限由继承方式决定。
14.C++中,构造函数的名字和类的名字相同。
15.假定AB为一个类,则执行“ABa[10];”语句时,系统自动调用该类的构造函数的次数为10次。
16.表达式cout< 17.C++中语句constchar*constp=〃hello〃;所定义的指针p和它所指的内容都不能被修改。 18.派生类从一个或多个以前定义的该类的基类继承数据和函数。 19.设px是指向一个类的动态分配的对象的指针变量,则执行“deletepx;”语句时,将自动调用该类的析构函数。 20.若需要把一个函数“voidF();”定义为一个类AB的友元函数,则应在类AB的定义中加入一条语句: friendvoidF();。 二、单项选择题(每题2分,共30分) 1.定义一个类的友元函数的主要作用是(A) A允许在类外访问类中的私有成员; B允许在类外访问类中的所有成员; C能够被类的成员函数调用; D能够被类的派生类的成员函数调用; 2.设有以下定义: classCircle: publicPoint{ doubler; public: …… } 则正确得描述为(C) APoint是Circle的派生类 Br是Point的数据成员 CCircle是Point的派生类 Dr是类Circle和类Point共同的数据成员 3.若有类定义: classTerm{ …… public: intaddterm(); }; 作用域运算符: : 使用正确的是(B)。 Aint: : Termaddterm(){…} BintTerm: : addterm(){…} CintTermaddterm: : (){…} DintTermaddterm(): : {…} 4.类的析构函数是一个对象被(B)时自动调用的。 A建立B撤消C赋值D引用 5.一个类的构造函数通常被定义为该类的(A)成员。 A公用B保护C私有D友元 6.一个类的析构函数通常被定义为该类的(C)成员。 A.私有B.保护C.公用D.友元 7.假定AB为一个类,则执行“ABx;”语句时将自动调用该类的(B)。 A带参构造函数B无参构造函数C拷贝构造函数D赋值重载函数 8.假定AB为一个类,则执行“ABr1=r2;”语句时将自动调用该类的(D)。 A无参构造函数B带参构造函数C赋值重载函数D拷贝构造函数 9.假定一个类的构造函数为“A(intaa,intbb){a=aa;b=aa*bb;}”,则执行“Ax(4,5);”语句后,x.a和x.b的值分别为(C)。 A4和5B5和4C4和20D20和5 10.假定一个类的构造函数为“A(intaa=1,intbb=0){a=aa;b=bb;}”,则执行“Ax(4);”语句后,x.a和x.b的值分别为(D)。 A1和0B1和4C4和1D4和0 11.假定AB为一个类,则(B)为该类的拷贝构造函数的原型说明。 AAB(ABx);BAB(AB&x);CvoidAB(AB&x);DAB(intx); 12.对于任一个类,用户所能定义的析构函数的个数至多为(B)。 A0B1C2D任意个 13.设px是指向一个类对象的指针变量,则执行“deletepx;”语句时,将自动调用该类的(C)。 A无参构造函数B带参构造函数C析构函数D拷贝构造函数 14.在多文件结构的程序中,通常把类的定义单独存放于(D)中。 A主文件B实现文件C库文件D头文件 15.在成员函数中进行双目运算符重载时,其参数表中应带有(B)个参数。 A0B1C2D3 16.C++源程序文件的默认扩展名为(A)。 AcppBexeCobjDlik 17.由C++源程序文件编译而成的目标文件的默认扩展名为(C)。 AcppBexeCobjDlik 18.由C++目标文件连接而成的可执行文件的默认扩展名为(B)。 AcppBexeCobjDlik 19.C++程序从上机到得到结果的几个操作步骤依次是(B)。 A编译、编辑、连接、运行B编辑、编译、连接、运行 C编译、运行、编辑、连接D编辑、运行、编辑、连接 20.程序中主函数的名字为(A)。 AmainBMAINCMainD任意标识符 21.程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用(D)符号作为分隔符。 A空格或逗号B逗号或回车C逗号或分号D.空格或回车 22.函数重载是指(A)。 A两个或两个以上的函数取相同的函数名,但形参的个数或类型不同 B两个以上的函数取相同的名字和具有相同的参数个数,但形参的类型可以不同 C两个以上的函数名字不同,但形参的个数或类型相同 D两个以上的函数取相同的函数名,并且函数的返回类型相同 23.为了提高程序的运行速度,可将不太复杂的功能用函数实现,此函数应选择(A)。 A内联函数B重载函数C递归函数D函数模板 24.采用重载函数的目的是(D)。 A实现共享B减少空间C提高速度D使用方便,提高可读性 25.当#include后面的文件名用双引号括起来时,寻找被包含文件的方式是(B)。 A直接按系统设定的标准方式搜索目录 B先在源程序所在目录搜索,再按系统设定的标准方式搜索目录 C仅仅搜索源程序所在目录 D搜索当前逻辑盘上的所有目录 26.当#include后面的文件名用尖括号括起来时,寻找被包含文件的方式是(A)。 A直接按系统设定的标准方式搜索目录 B先在源程序所在目录搜索,再按系统设定的标准方式搜索目录 C仅仅搜索源程序所在目录 D搜索当前逻辑盘上的所有目录 27.关于封装,下列说法中不正确的是(D)。 A通过封装,对象的全部属性和操作结合在一起,形成一个整体 B通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见) C通过封装,每个对象都成为相对独立的实体 D通过封装,对象的属性都是不可见的 28.面向对象方法的多态性是指(C)。 A一个类可以派生出多个特殊类 B一个对象在不同的运行环境中可以有不同的变体 C针对一消息,不同的对象可以以适合自身的方式加以响应 D一个对象可以是由多个其他对象组合而成的 29.C++类体系中,不能被派生类继承的有(A)。 A析构函数、构造函数 B构造函数、虚函数 C虚函数、静态成员函数 D静态成员函数、重载函数 30.以下哪个基类中的成员函数表示纯虚函数(C) Avirtualvoidvf(int)Bvoidvf(int)=0; Cvirtualvoidvf()=0Dvirtualvoidvf(int){} 三、程序改错题(每空2分,共10分) 1、程序中有错误的地方已用“← (1)”到“←(5)”指出,在下面给出的 到 五条出错原因中,正确地填上对应号。 私有继承后该函数是派生类的私有成员,外部函数不能访问。 对应号为“←(4)” 不论公有派生或私有派生,派生类都不能用基类私有成员。 对应号为“← (1)” 因为该类有构造函数,定义对象时不能缺省参数。 对应号为“← (2)” 派生类新增加的私有成员,外部函数不能直接访问。 对应号为“←(5)” 私有成员,外部函数不能直接访问。 对应号为“←(3)” #include classx{ private: inta,b; public: x(inta1=0,intb1=0){a=a1;b=b1;} intget1(){returna+b;} }; classy: privatex{ private: intc; public: y(inta1,intb1,intc1): x(a1,b1) {c=c1;} intget2(){returna+b+c;}← (1) intget3(){returnc;} }; voidmain() {xx1; yy1;← (2) yy2(3,4,5); cout< x1.get1(); y1.get1();←(4) y1.get3(); cout< } 2、程序中有错误的地方已用“←(6)”到“←(10)”指出,在下面给出的 到 五条出错原因中,正确地填上对应号。 指针指向对象时,不能直接用对象名,要加地址符“&”。 对应号为“←(6)” 不允许派生类的指针指向基类对象。 对应号为“←(10)” 基类指针不允许指向私有派生类的对象。 对应号为“←(9)” 调用指针的对象的成员函数时,写法出错。 对应号为“←(7)” 基类指针允许指向派生类的对象,但不能访问派生类新成员。 对应号为“←(8)” #include classbase{ public: virtualvoidshow(){……} }; classderive1: publicbase{ public: voidshow(){……} voidprint(){……} }; classderive2: privatebase{ public: voidshow(){……} }; voidmain() {baseobj1,obj2,*prt1; derive1obj3,obj4,*prt2; derive2obj5; prt1=obj1;←(6) prt1->show(); prt1=&obj3; prt1.show();←(7) prt1->print();←(8) prt1=&obj5;←(9) prt2=&obj4; prt2→show(); prt2=&obj2;←(10) prt2→show(); } 四、输出程序结果(每题10分,共30分) 1.#include classTime{ private: chara[9]; inthours; intminutes; intseconds; public: Time(ints=0,intm=0,inth=0){ hours=h; minutes=m; seconds=s;} voidshow() {cout<<"时间: "< "< "< friendTimeoperator+(Time&t1,Time&t2); }; Timeoperator+(Time&t1,Time&t2){ Timetemp; temp.hours=t1.hours+t2.hours; temp.minutes=t1.minutes+t2.minutes; temp.seconds=t1.seconds+t2.seconds; if(temp.seconds>60){temp.seconds=temp.seconds-60;temp.minutes++;} if(temp.minutes>60){temp.minutes=temp.minutes-60;temp.hours++;} if(temp.hours>=24)temp.hours=temp.hours-24; returntemp; } voidmain() {TimeT,T1(20,23,21),T2(10,25,15),T3(5,10,15); T=T1+T2; T.show(); T=T1+T3; T.show(); } 参考答案: 时间: 12: 48: 30 时间: 12: 33: 25 2.#include #include template voidswap(T&x,T&y) { Ttemp; temp=x; x=y; y=temp; } voidmain() { inti=0,j=1; doublea=1.25,b=-2.5; charch1='A',ch2='B'; cout<<"\n"< cout<<"\n"<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 面向 对象 程序设计 复习题