c++复习题资料.docx
- 文档编号:7196530
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:16
- 大小:26.19KB
c++复习题资料.docx
《c++复习题资料.docx》由会员分享,可在线阅读,更多相关《c++复习题资料.docx(16页珍藏版)》请在冰豆网上搜索。
c++复习题资料
考试题型:
选择题10题,共20分
填空题10题,共20分
程序阅读题3题,共15分
程序填空题,10空,共20分
简答题2题,共10分
编程题2题,共15分
一、C++选择题集(10个,20分)
1.下列的各类函数中,不是类的成员函数。
(C)
A)构造函数B)析构函数C)友元函数D)拷贝初始化构造函数
2.作用域运算符“:
:
”的功能是:
(B)
A)标识作用域的级别的B)指出作用域的范围的
C)给定作用域的大小的D)标识成员是属于哪个类的
3.下列说明中constchar*ptr;其中ptr应该是:
(C)
A)指向字符常量的指针B)指向字符的常量指针
C)指向字符串常量的指针D)指向字符串的常量指针
4.已知:
print()函数是一个类的常成员函数,它无返回值,下列表示中,是正确的。
(A)
A)voidprint()const;B)constvoidprint();
C)voidconstprint():
D)voidprint(const);
5.在类定义的外部,可以被访问的成员有(C)
A)所有类成员B)private的类成员
C)public的类成员D)public或private的类成员
6.关于类和对象不正确的说法是:
(C)
A)类是一种类型,它封装了数据和操作B)对象是类的实例
C)一个类的对象只有一个D)一个对象必属于某个类
7.在C++中,类与类之间的继承关系具有(C)
A)自反性B)对称性C)传递性D)反对称性
8.C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求解问题方法上进行的最大改进是:
(B)
A)面向过程B)面向对象C)安全性D)复用性
9.在C++中实现封装是借助于(B)
A)枚举B)类C)数组D)函数
10.在C++中用(D)能够实现将参数值带回。
a)数组b)指针c)引用d)上述ABC都可
11.考虑函数原型voidtest(inta,intb=7,charch="*"),下面的函数调用中,属于不合法调用的是:
(C)
A)test(5)B)test(5,8)C)test(6,"#")D)test(0,0,"*");
12.已知:
intm=10;下列表示引用的方法中,正确的是:
(C)
A)int&Z;B)int&t=10;C)int&X=m;D)float&f=&m;
13.定义析构函数时,应该注意:
(C)
A)其名与类名完全相同B)返回类型是void类型
C)无形参,也不可重载D)函数体中必须有delete语句
14.在公有继承的情况下,基类的成员(私有的除外)在派生类中的访问权限(B)
A)受限制B)保持不变C)受保护D)不受保护
15.下列不是函数重载所要求的条件是:
(D)
A)函数名相同B)参数个数不同
C)参数类型不同D)函数返回值类型不同
16.在C++中执行以下4条语句后输出rad值为:
(C)
staticinthot=200;
int&rad=hot;
hot=hot+100;
cout< A)0B)100C)300D)200 17.类claseCC1的说明如下,错误的语句是: (A) claseCC1{ inta=2;//(A) CC1();//(B) public: CC1(intval);//(C) ~CC1();//(D) }; 18.下列各类函数中,不是类的成员函数是: (C) A)构造函数B)析构函数 C)友元函数D)拷贝构造函数 19.类的指针成员的初始化是通过函数完成的,这个函数通常是: (B) A)析构函数B)构造函数C)其它成员函数D)友元函数 20.关于构造函数的说法,不正确的是: (A) A)没有定义构造函数时,系统将不会调用它B)其名与类名完全相同 C)它在对象被创建时由系统自动调用D)没有返回值 21.按解释中的要求在下列程序划线处填入的正确语句是: (C) #include classBase{ public: voidfun(){cout<<"Base: : fun"< }; classDerived: publicBase{ public: voidfun() {//在此空格处调用基类的函数fun() cout<<"Derived: : fun"< }; A)fun();B)Base.fun();C)Base: : fun();D)Base->fun(); 22.在保护继承的情况下,基类的成员(私有的除外)在派生类中的访问权限(C) A)受限制B)保持不变C)受保护D)不受保护 23.通常拷贝构造函数的参数是: (C) A)对象名B)对象的成员名C)对象的引用名D)对象的指针名 24.下列描述中,正确的是: (D) A)所有的运算符号都可以重载。 B)基类类型的指针可以指向子类,子类类型的指针也可以指向基类。 C)可以在类的构造函数中对静态数据成员进行初始化。 D)动态联编要满足两个条件: 被调用的成员函数是虚函数;用指针或引用调用虚函数。 25.关于成员函数特征的描述中,错误的是: (A) A)成员函数一定是内联函数B)成员函数可以重载 C)成员函数可以设置参数的默认值D)成员函数可以是静态的 26.下列关于构造函数的描述中,错误的是: (D) A)构造函数可以设置默认参数;B)构造函数在定义类对象时自动执行 C)构造函数可以是内联函数;D)构造函数不可以重载 27.下面描述中,表达错误的是: (B) A)公有继承时,基类中的public成员在派生类中仍是public的 B)私有有继承时,基类中的protected成员在派生类中仍是protected的 C)公有继承时,基类中的protected成员在派生类中仍是protected的 D)私有继承时,基类中的public成员在派生类中是private的 28.有如下类声明“classA{intx;……};”,则A类的成员x是: (B) A)公有数据成员B)私有数据成员C)公有成员函数D)私有成员函数 29.有如下程序: 执行后的输出结果应该是: (A) #include classcla{ staticintn; public: cla(){n++;} ~cla(){n--;} staticintget_n(){returnn;} }; intcla: : n=0; intmain() { cla*p=newcla; deletep; cout<<"n="< : get_n()< return0; } A)n=0B)n=1C)n=3D)n=4 30.有如下程序: 执行后的输出结果应该是: (A) #include classA{ public: A(){cout<<"A";} }; classC: publicA{ public: C(){cout<<"C";} }; voidmain(){Ccobj;} A)ACB)CAC)AD)C 31.有如下程序: 执行后的输出结果应该是: (D) #include classBASE{ public: ~BASE(){cout<<"BASE";} }; classDERIVED: publicBASE{ public: ~DERIVED(){cout<<"DERIVED";} }; voidmain(){DERIVEDx;} A)BASEB)DERIVEDC)BASEDERIVEDD)DERIVEDBASE 32.类TM和类TN是两个独立的类,那么类TM中哪种形式的数据成员一定是不允许的: (C) A)TM*aB)TN&aC)TMaD)TNa; 33.通过下述哪一项调用虚函数时,采用动态联编。 (A) A)对象指针B)对象名C)成员名限定D)派生类名 34.在下述哪种情况下适宜采用inline定义内联函数。 (C) A)函数体含有循环语句B)函数体含有递归语句 C)函数代码少、频繁调用D)函数体含有switch语句 35.创建动态对象,需要使用操作符(A) A)newB)deleteC).D)* 36.删除动态对象,需要使用操作符(B) A)newB)deleteC).D)* 37.在C++中不能被重载的一组运算符是: (A) A): : ? : .sizeofB)? : .sizeof++-> C): : ? : newdeleteD)++--? : sizeof 38.如果类A被说明成类B的友元,则(C) A)类A的成员即是类B的成员 B)类B的成员即是类A的成员 C)类A的成员函数可以访问类B的所有成员 D)类B的成员函数可以访问类A的所有成员 39.下面关于友元的描述中,错误的是: (D) A)友元函数可以直接访问该类的私有成员。 B)一个类的友元类中的所有成员函数都是这个类的友元函数。 C)利用友元可以提高程序的运行效率,但却破坏了封装性。 D)友元关系不能被继承,是双向可交换的。 40.下列虚基类的声明中,正确的是: (B) A)classvirtualB: publicAB)classB: virtualpublicA C)classB: publicAvirtualD)virtualclassB: publicA 41.C++设置虚基类的目的是(A) A)消除二义性B)简化程序C)提高运行效率D)减少目标代码 42.有如下模板定义: template Tfun(Tx,Ty){returnx*x+y*y;} 在下列对fun的调用中,错误的是: (C) A)fun(2,8)B)fun(2.0,8.2)C)fun(2.3,8)D)fun 43.通常情况下,函数模板中的类型参数个数不能是(A) A)0个B)1个C)2个D)3个 44.以下关于this指针的叙述中正确的是: (D) A)任何与类相关的函数都有this指针;B)类的成员函数都有this指针; C)类的友员函数都有this指针;D)类的非静态成员函数才有this指针; 45.当一个类的某个函数被说明为virtual时,在该类的所有派生类中的同原型函数(A) A)都是虚函数B)只有被重新说明时才是虚函数 C)都不是虚函数D)只有被重新说明为virtual时才是虚函数 46.在派生类中重新定义虚函数时,必须在下列哪方面与基类保持一致。 (A) A)参数类型B)参数名字C)操作内容D)赋值 47.关于const关键字说法错误的是(D) A)const关键字可以修饰对象和成员函数B)const对象不能被修改 C)const成员函数不能修改类数据成员D)const可以用于说明类 48.执行如下程序后的输出结果是: (B) #include classtest{ staticintcount; public: test(){count++;} ~test(){count--;} staticintgetCount(){returncount;} }; inttest: : count=0; intmain() { test*p=newtest; test*q=newtest; deletep; cout<<"count="< : getCount()< return0; } A)count=0B)count=1C)count=2D)count=3 49.关于类模板的说法正确的是: (B) A)类模板的主要作用是生成抽象类 B)类模板实例化时,编译器将根据给出的模板实参生成一个类 C)在类模板中的数据成员具有同样类型 D)类模板中的成员函数没有返回值 50.以下关键字不能用来声明类的访问权限的是: (C) A)publicB)privateC)staticD)protected 51.实现运行时的多态性采用(D) A)重载函数B)构造函数C)析构函数D)虚函数 52.下列说明语句中正确的是: (D) A)inta,&ra=a,&&ref=ra;B)int&refa[10]; C)inta,&ra=a,&*refp=&ra;D)int*pi,*&pref=pi; 53.对C++语言和C语言的兼容性,描述正确的是: (A) A)C++兼容CB)C++部分兼容CC)C++不兼容CD)C兼容C++ 54.在C++中使用流进行输入输出,其中用于屏幕输出的对象是: (C) A)cerrB)cinC)coutD)cfile 55.对使用关键字new所开辟的动态存储空间,释放时必须使用(C) A)freeB)createC)deleteD)realse 56.如没有使用private关键字定义类的数据成员,则默认为(A) A)privateB)publicC)protectedD)friend 57.在函数调用时,如某一默认参数要指明一个特定值,则有(A) A)其之前所有参数都必须赋值B)其之后所有参数都必须赋值 C)其前、后所有参数都必须赋值D)其前、后所有参数都不必赋值 58.下列哪个类型函数不适合声明为内联函数(A) A)函数体语句较多B)函数体语句较少C)函数执行时间较短D)函数执行时间过长 59.intFunc(int,int);不可与下列哪个函数构成重载(B) A)intFunc(int,int,int);B)doubleFunc(int,int); C)doubleFunc(double,double);D)doubleFunc(int,double); 60.类的私有成员可在何处访问(D) A)通过子类的对象访问B)本类及子类的成员函数中 C)通过该类对象访问D)本类的成员函数中 61.如果没有为一个类定义任何构造函数的情况下,下列描述正确的是: (A) A)编译器总是自动创建一个不带参数的构造函数B)这个类没有构造函数 C)这个类不需要构造函数D)该类不能通过编译 62.一个类可包含析构函数的个数是: (B) A)0个B)1个C)0个或1个D)0个或多个 63.一个类可包含构造函数的个数是: (D) A)0个B)0个或1个C)0个或多个D)1个或多个 64.this指针存在的目的是: (B) A)保证基类公有成员在子类中可以被访问 B)保证每个对象拥有自己的数据成员,但共享处理这些数据成员的代码 C)保证基类保护成员在子类中可以被访问 D)保证基类私有成员在子类中可以被访问 65.下列关于类的权限的描述错误的是: (A) A)类本身的成员函数只能访问自身的私有成员 B)类的对象只能访问该类的公有成员 C)普通函数不能直接访问类的公有成员,必须通过对象访问 D)一个类可以将另一个类的对象作为成员 66.设类A将其它类对象作为成员,则建立A类对象时,下列描述正确的是: (B) A)A类构造函数先执行B)成员构造函数先执行 C)两者并行执行D)不能确定 67.下列描述错误的是: (A) A)在创建对象前,静态成员不存在B)静态成员是类的成员 C)静态成员不能是虚函数D)静态成员函数不能直接访问非静态成员 68.对于友元描述正确的是: (B) A)友元是本类的成员函数B)友元不是本类的成员函数 C)友元不是函数D)友元不能访问本类私有成员 69.在哪种派生方式中,派生类可以访问基类中的protected成员(AB) A)public和privateB)public和protected C)protected和privateD)仅protected 70.下面的哪个保留字不能作为函数的返回类型(C) A)voidB)intC)newD)long 71.假定有类AB,有相应的构造函数定义,能正确执行“ABa(4),b(5),c[3],*p[2]={&a,&b};”语句,请问执行完此语句后共调用该类构造函数的次数为(C) A)3B)4C)5D)6 72.假定有类AB,有相应的构造函数定义,能正确执行“ABa(4),b(5),c[3],*p[2]={&a,&b};”语句,请问执行完此语句后共调用该类析构函数的次数为(C) A)3B)4C)5D)6 73.对类中声明的变量,下列描述中正确的是: (B) A)属于全局变量B)属于该类,某些情况下也可被该类不同实例所共享 C)只属于该类D)任何情况下都可被该类所有实例共享 74.假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为(C) A)ABoperator+(AB&A,AB&B);B)AB&operator+(ABA); C)ABoperator+(AB&A);D)AB*operator+(ABA); 二、填空题(10个,20分) 假定有如下定义: intx;,若要将整型变量y定义为变量x的引用,则应使用的定义语句是 int&y=x;。 具有相同函数名但具有不同参数表的函数称为重载函数。 ' 执行完下列三条语句后,指针变量c指向b。 Inta,b,*c=&a; int*&p=c; p=&b; 假设有如下函数定义: voidFun(intx,inty=100);则语旬Fun(5)语句Fun(5,100)等价。 在一个C++程序中,每个变量都必须遵循先定义后使用的原则。 定义一个函数时,若只允许函数体访问形参的值而不允许修改它的值,则应把该形参声明为常量,即在该形参声明的前面加上const关键字进行修饰。 在一个函数的定义或声明前加上关键字inline时,该函数就声明为内联函数。 静态整型变量的默认初始值是0。 在撤销类的对象时,C++程序将自动调用该对象的析构函数。 类中的构造函数是一个特殊的成员函数,它由类的对象自动调用,它的作用是为对象分配内存,数据成员初始化。 对类中的成员函数和属性的访问是通过public、protected和private这3个关键字来控制的。 delete运算符删除new运算符所动态分配的内存空间。 假定用户没有给一个名为MyClass的类定义析构函数,则系统为其定义的默认析构函数形式为 MyClass()。 类中构造函数有一个或多个,析构函数有一个。 类是对具有共同属性和行为的一类事物的抽象描述,共同属性被描述为类中的数据成员,共同行为被描述为类中的成员函数。 若要把类FriendClass定义为类MyClass的友元类,则应在类MyClass的定义中加入语句 friendclassFriendClass;。 ___new_运算符对指定类型对象动态分配内存并返回该类型的___指针__。 若要把函数voidFriendFunction()定义为类MyClass的友元函数,则应在类MyClass的定义中加入语句___friendvoidFriendFunction();。 类的具体表现是通过定义___对象______来操作的。 在定义类的对象时,C++程序将自动调用该对象的___构造____函数初始化对象自身。 一般情况下,按照面向对象的要求,把类中的数据成员(属性)定义为___private___权限,而把成员函数(方法)定义为___public___权限。 在类中定义和实现的函数称为__内联函数__。 非成员函数应声明为类的___友元函数___才能访问这个类的private成员。 垂直访问时,保护成员的访问控制权限与____公有_____成员相同。 利用继承能够实现___代码复用___。 这种实现缩短了程序的开发时间,促使开发人员复用已经测试和调试好的高质量软件。 派生类对基类的继承有三种方式: public、protected和private。 多继承情况下,派生类的构造函数的执行顺序取决于___定义__派生类时所指定的各基类的顺序。 C++提供的__多继承__机制允许一个派生类继承多个基类,即使这些基类是相互无关的。 派生类可以调用其___定义___中不具备的数据和操作。 对基类数据成员的初始化必须在派生类构造函数中的初始化列表处执行。 如果类Alpha继承了类Beta,则类Alpha称为派生类,类Beta称为基类。 设置虚基类的目的是为了消除二义性,可通过virtual标识虚基类。 若多继承时,多个基类中拥有一个同名的成员,则不能用调整访问权限确定对该成员的访问。 多继承可以视为是单继承的扩展。 类继承中,缺省的继承方式是private。 当用protected继承从基类派生→个类时,基类的public成员成为派生类的protected成员,protected成员成为派生类的protected成员。 _公有派生_类的对象可作为基类的对象处理。 指向基类的对象的指针变量也可以指向公有派生类的对象。 类之间的”有”关系代表组合,”是”关系代表继承。 在析构函数中调用虚函数时,采用静态联编。 动态联编是在虚函数的支持下实现的,它通过指针或引用来调用该函数操作。 动态联编中直到程序运行时才能确定调用哪个函数: 耐静态联编刷则是在程序编译时进行的。 C++中不支持虚构造函数,但支持虚析构函数。 静态联编所支持的多态性称为编译时多态性, 动态联编所支持的多态性则称为运行时多态性,动态多态性由虚函数来支持。 在类定义中,将=0置于虚函数的函数原型的末尾可以将该函数声明为纯虚函数。 抽象类不能定义对象,但可以声明指针或引用作为参数类型,函数返回类型或显式转换类型。 对虚函数使用对象指针或引用调用,系统使用动态联编: 使用对象调用时,系统使用静态联编。 在一个成员函数内调用一个虚函数时,对该虚函数的调用进行动态联编。 带有纯虚函数的类称为抽象类,它只能作为基类来使用。 要在类的对象上使用运算符,除了运算符=和&以外,其他的运算符都必须被重载。 在C++中,只能重载为类的成员函数的运算符是=、()、[]、->、new、de
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 复习题 资料
![提示](https://static.bdocx.com/images/bang_tan.gif)