C++复习题.docx
- 文档编号:12668261
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:17
- 大小:24.43KB
C++复习题.docx
《C++复习题.docx》由会员分享,可在线阅读,更多相关《C++复习题.docx(17页珍藏版)》请在冰豆网上搜索。
C++复习题
C++练习题
1、关于new运算符的下列描述中,()是错误的。
D
A、它可以用来动态创建对象和对象数组;
B、使用它创建的对象或对象数组可以使用运算符delete删除;
C、使用它创建对象时要调用构造函数;
D、使用它创建对象数组时必须指定初始值;
2、友元的作用是()A
A.、提高程序的运用效率
B、加强类的封装性
C、实现数据的隐藏性
D、增加成员函数的种类
3、对重载函数的要求中,不正确的为()D
A、要求参数的个数不同B、要求参数中至少一个类型不同
C、要求参数个数相同时,类型不同D、要求函数的返回类型不同
4、下列属于类的析构函数特征的是()A
A、一个类中只能定义一个析构函数
B、析构函数名与类名不同
C、析构函数的定义只能在类体内
D、析构函数可以有一个或多个参数
5、inti=100;下列引用方法中,正确的是()A
A、int&r=i;B、int&r=100;C、int&r;D、int&r=&i;
6、类的实例化是指()B
A、定义类B、创建类的对象
C、指明具体类D、调用类的成员
7.不属于成员函数的是()B
A.静态成员函数B.友元函数
C.构造函数D.析构函数
8.下列运算符中,()运算符在C++中不能重载。
C
A.&&B.[]C.:
:
D.new
9.下列说法中正确的是()B
A.类定义中只能说明函数成员的函数头,不能定义函数体
B.类中的函数成员可以在类体中定义,也可以在类体之外定义
C.类中的函数成员在类体之外定义时必须要与类声明在同一文件中
D.在类体之外定义的函数成员不能操作该类的私有数据成员
10.已知类A是类B的友元,类B是类C的友元,则()D
A.类A一定是类C的友元
B.类C一定是类A的友元
C.类C的成员函数可以访问类B的对象的任何成员
D.类A的成员函数可以访问类B的对象的任何成员
11.有如下类定义:
classPoint
{
intx_,y_;
public:
Point():
x_(0),y_(0){}
Point(intx,inty=0):
x_(x),y_(y){}
};
若执行语句
Pointa
(2),b[3],*c[4];
则Point类的构造函数被调用的次数是()C
A.2次B.3次C.4次D.5次
12.下面对派生类的描述中,错误的是()D
A.一个派生类可以作为另外一个派生类的基类
B.派生类至少有一个基类
C.派生类的成员除了它自己的成员外,还包含了它的基类的成员
D.派生类中继承的基类成员的访问权限到派生类中保持不变
13.有如下程序:
#include
usingnamespacestd;
classBASE{
public:
~BASE(){cout<<"BASE";}
};
classDERIVED:
publicBASE{
public:
~DERIVED(){cout<<"DERIVED";}
};
intmain(){DERIVEDx;return0;}
执行后的输出结果是()D
A.BASEB.DERIVED
C.BASEDERIVEDD.DERIVEDBASE
14.当保护继承时,基类的()在派生类中成为保护成员,不能通过派生类的对象来直接访问。
B
A.任何成员B.公有成员和保护成员
C.公有成员和私有成员D.私有成员
15.以下基类中的成员函数,哪个表示纯虚函数()C
A.virtualvoidvf(int); B.voidvf(int)=0;
C.virtualvoidvf()=0; D.virtualvoidyf(int){}
16.抽象类应含有()。
D
A.至多一个虚函数
B.至少一个虚函数
C.至多一个纯虚函数
D.至少一个纯虚函数
17.下列关于引用的说法,错误的是()。
D
A.引用在定义时必须初始化
B、引用在初始化时不能绑定常量值
C、引用初始化后,可以通过更变来引用其他变量
D、数组不能定义引用
18.类模板的实例化()A
A.在编译时进行B.属于动态联编
C.在运行时进行D.在连接时进行
19.类模板的参数错误的说法是()B
A.可以有多个B.不能有基本数据类型
C.可以是0个D.参数不能给初值
20.以下程序中,new语句干了什么。
()C
int**num;
num=newint*[20];
A、了长度为20的整数数组空间,并将首元素的指针返回。
B、分配了一个整数变量的空间,并将其初始化为20。
C、分配了长度为20的整数指针数组空间,并将num[0]的指针返回。
D、存在错误,编译不能通过。
21.关于delete运算符的下列描述中,()是错误的。
D
A、它必须用于new返回的指针;
B、使用它删除对象时要调用析构函数;
C、对一个指针可以使用多次该运算符;
D、指针名前只有一对方括号符号,不管所删除数组的维数。
22.在()情况下适宜采用inline定义内联函数。
C
A、函数体含有循环语句
B、函数体含有递归语句
C、函数代码少、频繁调用
D、函数代码多、不常调用
23、下列语句中,错误的是()B
A、constintbuffer=256;
B、constinttemp;
C、constdouble*point;
D、double*constpt=newdouble(5.5);
24、下列选项中,不属于面向对象程序设计特征的是()C
A、继承性B、多态性C、类比性D、封装性
25、下列关于类和对象的叙述中,错误的是()A
A、一个类只有一个对象B、对象是类的具体实例
C、类是某一类对象的抽象D、类和对象的关系就像数据类型和变量的关系
26、在下列函数原型中,可以作为类AA构造函数的是()D
A、voidAA(int);B、intAA();
C、AA(int)const;D、AA(int);
27、下列关于this指针的叙述中,正确的是()D
A、任何与类相关的函数都有this指针B、类的成员函数都有this指针
C、类的友元函数都有this指针D、类非静态成员函数才有this指针
28、关于模板,错误的是()C
A、模板声明中的第1个符号总是template
B、在模板声明中用“<”“>”括起来的部分是类型参数表
C、类模板不能有数据成员
D、在一定条件下函数模板的类型参数可以省略
29、C++中的模板包括()C
A、对象模板和函数模板B、对象模板和类模板
C、函数模板和类模板D、变量模板和对象模板
30、通过运算符重载,可以改变运算符原有的()A
A、操作数类型B、操作数个数C、优先级D、结合性
31、派生类的成员函数不能访问基类的()C
A、公有成员和保护成员B公有成员、C、私有成员D、保护成员
32、下列关于派生类构造函数和析构函数的说法中,错误的是()D
A、派生类的构造函数会隐含调用基类的构造函数
B、如果基类中有默认构造函数,派生类可以不定义构造函数
C、在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数
D、在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数
33、在C++中,用于实现运行时多态性的是()D
A、友元函数B、重载函数C、模板函数D、虚函数
34、对类的构造函数和析构函数描述正确的是____。
A
A、构造函数可以重载,析构函数不能重载
B、构造函数不能重载,析构函数可以重载
C、构造函数可以重载,析构函数也可以重载
D、构造函数不能重载,析构函数也不能重载
35、类的析构函数的作用是______。
D
A、一般成员函数B、类的初始化C、对象的初始化D、释放对象
类的析构函数是在类对象被释放的时候自动调用的,它的作用是释放一个对象。
在对象删除前,用它来做一些清理工作。
36、关于纯虚函数和抽象类的描述中,()是错误的。
C
A.纯虚函数是一种特殊的虚函数,它没有具体的实现
B.抽象类是指具有纯虚函数的类
C.一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类
D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出
37、假定MyClass为一个类,则执行MyClassa,b
(2),*p;语句时,自动调用该类构造函数____次。
A
A、2B、3C、4D、5
定义指针p并不调用类的构造函数。
38、下面对于友元函数描述正确的是_____。
C
A、友元函数的实现必须在类的内部定义
B、友元函数是类的成员函数
C、友元函数破坏了类的封装性和隐藏性
D、友元函数不能访问类的私有成员
友元函数虽然在类的定义中声明,但它不是类的成员函数。
39、在C++中,数据封装要解决的问题是______。
D
A、数据的规范化B、便于数据转换
C、避免数据丢失D、防止不同模块之间数据的非法访问
40、一个类的友元函数或友元类能够通过成员操作符访问该类的_______。
D
A、私有成员B、保护成员C、公用成员D、所有成员
类的友元函数对类的属性和方法的访问能力等同与类的成员函数。
41、为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问
权限定义为_______。
A
A、publicB、protectedC、privateD、static
42、下面对静态数据成员的描述中,正确的是_____。
D
A、静态数据成员可以在类体内进行初始化
B、静态数据成员不可以被类的对象调用
C、静态数据成员不能受private控制符的作用
D、静态数据成员可以直接用类名调用
静态数据成员应该在类体外进行初始化,其初始化与它的访问控制权无关,其访问则受到访问控制权的限制。
静态数据成员是所有类对象共享的成员,即可通过类名访问,又可通过对象访问。
通过类名访问更方便,更高效
43、下面对静态数据成员的描述中,正确的是____。
A
A、静态数据成员是类的所有对象共享的数据
B、类的每个对象都有自己的静态数据成员
C、类的不同对象有不同的静态数据成员值
D、静态数据成员不能通过类的对象调用
44、对于拷贝构造函数,正确的描述是________。
A
A、在C++语言中如果不自定义类的拷贝构造函数,则每个类都有默认的拷贝构造函数
B、必须为每个类定义拷贝构造函数
C、如果要使用拷贝构造函数,则必须在类中先定义
D、当定义了类的构造函数时,如果要使用拷贝构造函数,则必须定义拷贝构造函数
若没定义构造函数、拷贝构造函数、析构函数,使用默认的函数,但若定义了这类函数默认的函数自动失效。
45、对于拷贝构造函数和赋值操作的关系,正确的描述是__________。
C
A、拷贝构造函数和赋值操作是完全一样的操作
B、进行赋值操作时,会调用类的拷贝构造函数
C、当调用拷贝构造函数时,类的对象正在被建立并被初始化
D、拷贝构造函数和赋值操作不能在同一个类中被同时定义
调用拷贝构造函数是定义一个新对象,赋值操作是对一个已存在的对象进行更新。
46、关于new运算符的错误的描述是_______。
A
A、使用运算符new创建对象数组时必须定义初始值
B、使用运算符new创建对象时,会调用类的构造函数
C、运算符new可以用来动态创建对象和对象数组
D、使用new运算符创建的对象可以使用运算符delete删除
使用运算符new创建对象数组时不能为该数组定义初始值,
47、多重继承的构造顺序一般可分为4步,下面给出这4个步骤:
step1:
任何非虚拟基类的构造函数按照它们被继承的顺序构造。
step2:
任何虚拟基类的构造函数按照它们被继承的顺序构造。
step3:
任何成员对象的构造函数按照它们声明的顺序构造。
step4:
类自己的构造函数。
这4个步骤的正确顺序是()。
C
A.step4、step3、step1、step2B.step2、step4、step3、step1
C.step2、step1、step3、step4D.step3、step4、step1、step2
48、设置填充字符的函数是()。
C
A.intios:
:
width(int)B.intios:
:
width()
C.charios:
:
fill(char)D.charios:
:
fill()
49、返回当前精度的成员函数是()。
D
A.intios:
:
width(int)B.intios:
:
width()
C.intios:
:
precision()D.intios:
:
precision(int)
50、下列不能作为类的成员的是()B
A.自身类对象的指针
B.自身类对象
C.自身类对象的引用
D.另一个类的对象
类的定义,如果有自身类对象,使得循环定义,B项错误。
在类中具有自身类的指针,可
以实现链表的操作,当然也可以使用对象的引用。
类中可以有另一个类的对象,即成员对象。
51、在公有派生类的成员函数不能直接访问基类中继承来的某个成员,则该成员一定是基类中的()A
A.私有成员B.公有成员C.保护成员D.保护成员或私有成员
解析:
在派生类中基类的保护或者基类公有都可以直接访问,基类的私有成员只能是基类
的成员函数来访问。
所以选择A项。
51、所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是()A
A.类B.对象C.函数体D.数据块
解析:
类即数据和操作的组合体,数据是类的静态特征,操作是类具有的动作。
52、静态成员函数没有()B
A.返回值B.this指针C.指针参数D.返回类型
53、有关多态性说法不正确的是()C
A.C++语言的多态性分为编译时的多态性和运行时的多态性
B.编译时的多态性可通过函数重载实现
C.运行时的多态性可通过模板和虚函数实现
D.实现运行时多态性的机制称为动态多态性
解析:
多态性分为静态的和动态的。
静态通过函数的重载来实现,动态是通过基类指针或
基类引用和虚函数来实现的。
所以错误的是C项。
54、下列不是描述类的成员函数的是()C
A.构造函数B.析构函数C.友元函数D.拷贝构造函数
解析:
构造函数、析构函数、拷贝构造函数都是特殊的成员函数,友元则不是成员函数。
55、已知f1和f2是同一类的两个成员函数,但f1不能直接调用f2,这说明()C
A.f1和f2都是静态函数
B.f1不是静态函数,f2是静态函数
C.f1是静态函数,f2不是静态函数
D.f1和f2都不是静态函数
解析:
普通成员函数可以调用静态函数,相反静态函数不能调用普通成员函数,这与普通
函数与常成员函数相同。
56、在C++语言中,数据封装要解决的问题是()D
A.数据的规范化B.便于数据转换
C.避免数据丢失D.防止不同模块之间数据的非法访问
解析:
封装是指把对象属性和操作结合在一起,构成独立的单元,它的内部信息对外界是
隐蔽的,不允许外界直接存取对象的属性,只能通过有限的接口与对象发生联系。
类是数据封装的工具,对象是封装的实现。
类的访问控制机制体现在类的成员中可以有公有成员、私有成员和保护成员。
对于外界而言,只需要知道对象所表现的外部行为,而不必了解内部实现细节。
封装体现了面向对象方法的“信息隐蔽和局部化原则”。
57、在类的定义中,用于为对象分配内存空间,对类的数据成员进行初始化并执行其他内部管理操作的函数是()C
A.友元函数B.虚函数C.构造函数D.析构函数
解析:
定义构造函数作用就是初始化对象,而析构函数释放对象空间。
虚函数用于完成多态性,友元增加访问方便性。
58、当一个类的某个函数被说明为virtual时,该函数在该类的所有派生类中()A
A.都是虚函数B.只有被重新说明时才是虚函数
C.只有被重新说明为virtual时才是虚函数D.都不是虚函数
解析:
在基类声明为virtual的函数为虚函数,在派生类中只要有相同的函数(函数名相
同、返回值相同、形参类型和个数相同)即使不用virtual说明,也都是虚函数。
59、适宜采用inline定义函数情况是()C
A.函数体含有循环语句B.函数体含有递归语句
C.函数代码少、频繁调用D.函数代码多、不常调用
解析:
内联函数具有程序代码少、频繁调用和执行效率高的特征,所以选择C项。
60、C++类体系中,不能被派生类继承的有()B
A.转换函数B.构造函数C.虚函数D.静态成员函数
解析:
构造函数不能被继承,而转换函数、虚函数和静态成员函数都可以被继承
二、填空题
1.布尔型数值只有两个:
true,false。
在C++的算术运算式中,分别当作非0,0。
2.带inline关键字定义的函数为内联函数,在编译时将函数体展开到所有调用处。
内联函数的好处是节省时间开销。
3.每个对象都有一个指向自身的指针,称为this指针,通过使用它来确定其自身的地址。
4.运算符new自动建立一个大小合适的对象并返回一个具有正确类型的指针。
5.C++程序设计的关键之一是利用继承实现软件重用,有效的缩短程序的开发时间。
6.当私有派生时,基类的公有成员成为派生类的私有成员;保护成员成为派生类的私有成员;私有成员成为派生类的不可访问成员。
7.C++的动态多态性是通过虚函数实现的。
8.当通过基类指针或引用使用虚函数时,C++会在与对象关联的派生类中正确的选择重定义的函数。
9.互相关联的各个类之间的关系主要分为组合has-a和继承is-a关系。
10在C语言中,编程的单位是__①函数___;在C++语言中,编程的单位是__②类____。
11类是对具有共同属性和行为的一类事物的抽象描述,共同属性被描述为类中的
__①数据成员___,共同行为被描述为类中的__②成员函数___。
12类的具体表现是通过定义__对象_____来操作的。
13对类中的成员函数和属性的访问是通过__①private_、_②protected_和__③public__这3个关键字来控制的。
14一般情况下,按照面向对象的要求,把类中的数据成员(属性)定义为__①private___权限,而把成员函数(方法)定义为__②public____权限。
15在类定义中,数据和成员函数默认权限是private_________。
16类中构造函数有__①一个或多个___个,析构函数有__②一个_个。
17类中的构造函数是一个特殊的成员函数,它由类的对象__①自动___调用,它的作用是②为对象分配内存空间,为类的数据成员进行初始化并进行一些其它类的内部操作。
18在定义类的对象时,C++程序将自动调用该对象的_构造_____函数初始化对象自身。
19在撤销类的对象时,C++程序将自动调用该对象的__析构____函数。
20__①new___运算符对指定类型对象动态分配内存并返回___②指向该类型对象的指针_。
21__delete______运算符删除(25)题中的运算符所动态分配的内存空间。
22假定用户没有给一个名为MyClass的类定义构造函数,则系统为其定义的默认构造
函数形式为MyClass(){}______。
23假定用户没有给一个名为MyClass的类定义析构函数,则系统为其定义的默认析构函数形式为~MyClass(){}______。
24在类中定义和实现的函数称为_内联函数_______。
25非成员函数应声明为类的__友元______才能访问这个类的private成员。
26若要把类FriendClass定义为类MyClass的友元类,则应在类MyClass的定义中加入语句_friendclassFriendClass_______。
27若要把函数voidFriendFunction()定义为类MyClass的友元函数,则应在类MyClass的定义中加入语句_friendvoidFriendFunction()______。
28const修饰符的语义是_修饰在它左边出现的类型描述符_______。
29常量对象应_初始化_____,并且不能在生成之后修改。
30在C++语言中,每个类都有一个隐含的指针叫做___①this____指针。
该指针指向
___②正在调用成员函数的对象___。
31当一个类对象的成员函数被调用时,该成员函数的__this指针__指向调用它的对象。
32有如下定义语句:
MyCla
s*p[10];,则当类对象数组指针p离开它的作用域时,系
统自动调用该类析构函数__0_____次。
33STL是C++提供的标准模板库,可以实现高效的泛型程序设计,体现了泛型程序设计的思想。
34map容器中的数据元素不存储在顺序线性数据结构中,它提供一个关键字key到值value的映射。
35在STL中,iterator如同一个特殊的指针(可以指向容器中某个位置的数据元素)。
36vector容器实质上就是一个动态数组,会根据数据的增加,动态的增加数组空间。
37标准模板库STL在algorithm头文件中声明了很多常用的算法,这些算法都是函数模板。
38stack容器具有FILO(FirstInLastOut)的性质,是STL提供的一种容器适配器。
39、C++语言支持的两种多态性分别是编译时的多态性和_运行时__的多态性。
40、C++的流库预定义了4个流,它们是cin、cout、clog和_cerr__。
41、定义类动态对象数组时,元素只能靠自动调用该类的_无参构造函数__来进行初始化。
三、编写程序
1、编写一个复数类模板Complex,其数据成员real、img的类型未知,定义相应的成员函数(构造函数、输出函数、常用运算符(如:
+、-、++、==、<<、>>等)重载函数)在主函数中定义类模板类对象,分别以int、double实例化类型参数。
2、自定义String类,重载运算符“=、+=、+、[]”。
3、矩阵的乘法运算。
线性代数中的矩阵可以表示为一个row*column的二维数组,建立该整数矩阵类matrix构造函数;并对乘法运算符进行重载。
4、编程:
基类Shape为抽象类,在其中定义面积、周长、输出的纯虚函数,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 复习题