C++练习题
一、选择题
1、下列关键字中,( c)不是类定义中使用的关键字。
A. class B. public C. switch D. private
switch要和case 连用,用于多分支的选择结构,比if …else 结构清晰
2、在new 运算符的下列描述中,(b )是错误的。
A. 它可以动态创建对象和对象数组;
B. 用它创建对象数组时必须指定初始值;只能先创建对象数组,再用循环赋值
C. 用它创建对象时要调用构造函数;
D. 用它创建的对象应使用运算符delete 来释放。
3、主函数可以访问派生类的对象中它的哪一类基类成员?( a)
A. 公有继承的基类的公有成员
基类的公有成员,在公有继承下,仍然是公有的,可以在类外访问
B. 公有继承的基类的保护成员
基类的保护成员,在公有继承下,仍然是保护的,不可以在类外访问
C. 公有继承的基类的私有成员
基类的私有成员,在公有继承下,仍然是私有的,不可以在类外访问
D. 保护继承的基类的公有成员
基类的公有成员,在保护继承下,变成保护的,不可以在类外访问
4、定义重载函数的下列条件中,(c)是错误的。
A. 要求参数个数不同; B. 要求参数类型不同;
C. 要求函数返回值类型不同; D. 要求在参数个数相同时,参数类型的顺序不同。
5、下列函数中,(d )不能重载。
A. 成员函数B. 非成员函数
C. 构造函数D. 析构函数
6、下列构造函数的特点中,(c )是错误的。
A. 构造函数具有一般成员函数的特点;
B. 构造函数的名称与其类名相同;
C. 构造函数必须指明其类型;构造函数是没有返回值,更谈不上返回值的类型
D. 一个类中可定义1个或多个构造函数。
7、关于成员函数特征的下述描述中,(a )是错误的。
A.成员函数必须要写在类的内部 B.成员函数可以重载;
C.成员函数可以设置参数的缺省值; D.成员函数可以是静态的。
8、C++语言的基本数据类型包括( b)。
A. 整型、实型、逻辑型、空型
B. 整型、实型、字符型、空型
C. 整型、字符型、逻辑型、空型
D. 整型、实型、指针型、字符型
9、下列关于指针的运算中,(d )是非法的。
A.两个指针在一定条件下,可以进行相等或不等的运算;
B.可以用一个空指针赋值给某个指针;
C.一个指针可以加上两个整数之差;
D.两个指针在一定条件下,可以相加。
10、在C++中,关于下列设置缺省参数值的描述中,正确的是(b )。
A. 不允许设置缺省参数值;
B. 在指定了缺省值的参数右边,不能出现没有指定缺省值的参数;
C. 只能在函数的定义中指定参数的缺省值;
D. 设置缺省参数值时,必须全部都设置。
11、预处理命令在程序中是以(b )开头的。
A. * B. # C.: D./
12、按照标识
符的要求,( a)符号不能组成标识符。
A. - B. _ C. 大小写字母D. 数字字符
13、假定a为一个数组名, 则下面的哪一种表示有错误。( d)
A. a[i] B. *(a+1) C. *a D. *a++
* 与++优先级相同,结合方向是右结合,但是a++是后缀形式,所以先执行*a 取出a
中的值,然后,让指针a 自加,即:向下移动一位。数组名是首地址不错,但是数组名是个
常量,常量不可以自加。比如:5++,在C、C++中都是错误的。
14、关于delete运算符的下列描述中,错误的是(v )。
A. 它必须用于new 返回的指针;
B. 使用它删除对象时要调用析构函数;
C. 对一个指针可以使用多次该运算符;
默认的拷贝构造函数就是浅拷贝,对一个指针删除了两次,是不对的。
D. 指针名前只有一对方括号符号,不管所删除数组的维数。
15、下列对派生类的描述中,( c)是错误的。
A. 一个派生类可以作为另一个派生类的基类;
B. 派生类至少应有一个基类;
C. 基类中成员的访问权限被派生类继承后都不改变;
继承有三种方式,public ,private,protected,不同的继承方式,导致基类成员的访问
权限发生变化。
D. 派生类的成员除了自己定义的成员外,还包含了它的基类成员。
16、main 函数在源程序中的位置( c)。
A. 必须在最开始处B. 必须在子函数的后面
C. 可以任意D. 必须在最后
17、在c++语言中,要求参加运算的数必须是整数的运算符是( c)。
A. / B.! C. % D. = =
18、对两个基本类型相同的指针变量,不能进行的运算是(a )。
A. + B. - C. = D. = =
19、执行C++程序时出现的“溢出”属于( a)错误。
A.运行 B.链接 C.编译 D.逻辑
20、下列关于引用的说法错误的是(a )。
A.不能声明一个指针的引用;指针也是可以有引用的。
B.引用必须在定义的同时进行初始化;
C.返回引用的函数,可以作为左值被调用;
D.使用引用参数,可以实现将实参的地址传递给行参。
21、int i,int * const p=&i,说明不能修改(a )。
A.p 指针的指向;
int * const p 说明p 是指针常量,说明指针的指向不可发生改变,所以不能改变p 指
针的指向。但是通过p 可以间接改变变量i 的值。
B.p 指针指向的变量;
C.i 的值;
D.上述A、B、C 三者。
22、下面的函数声明中, ( c)是” void BC(int a, int b);”的重载函数?
A.int BC(int a, int b) B.void BC(int a, char b)
C.float BC(int a, int b, int c=0) D.void BC(int a, int b=0)
integer 与char 类型,在一定范围内是通用的,在0-255 之间。
23、下列静态数据成员的特性中,错误的是( b)。
A.说明静态数据成员时前边要加修饰符static;一定要有
B.引用静态数据成员时,必须用类名和作用域运算符引导;使用对象名也
可以的
C.静态数据成员是所有对象所共用的;
D.静态数据成员要在类的定义之外进行初始化。
24、判断字符串s1和s2 是否相等的表达式为(d )。
A.s1=s2 B.s1= =s2
C.strcpy(s1,s2)= =0 D.strcmp(s1,s2)= =0
25、若用数组名作为调用函数的实际参数,则传递给形式参数的是( a)。
A.数组存储首地址;
B.数组的第一个元素值;
C.数组中全部元素的值;
D.数组元素的个数。
26、在C++程序中使用的cin 标识符是系统类库中定义的( c)类中的一个对象。
A. istream B. ostream C. iostream D. fstream
27、在下列各函数中,不是类的成员函数的是(c )。
A.构造函数 B.析构函数C.友元函数 D.拷贝构造函数
28、假定AA 是一个类,abc()是该类的一个成员函数(member function),则参数表中隐含
的第一个参数为(b )。
A. abc B. *this C. this D. this&
29、类中定义的成员默认为(b )访问属性。
A. public B. private C. protected D. friend
30、假定AB 为一个类,则执行“AB x;”语句时将自动调用该类的(b )。
A. 带参构造函数B. 无参构造函数
C. 拷贝构造函数D. 赋值重载函数
31、对于派生类的构造函数,在定义对象时构造函数的执行顺序为:( d)。
①基对象的构造函数
③派生类(Base Class)的构造函数
②成员类(Derived Class)本身的构造函数
A. ③②① B.③①② C.①③② D. ①②③
32、如果一个类中,至少有一个纯虚函数(Pure virtual function),那么称该类为(a )。
A. 抽象类B. 虚基类C. 派生类D. 以上都不对
33、设置虚基类的目的是(c )。
A.简化程序 B.提高运行效率C.消除二义性 D.减少目标代码
34、要使语句“p=new int[5][12];”能够正常执行,p 应定义为(d )。
A. int *p; B. int **p; C. int *p[12]; D. int(*p)[12];
35、假定AB 为一个类,则执行“AB x;”语句时将自动调用该类的( b)。
A. 带参构造函数B. 无参构造函数
C. 拷贝构造函数D. 赋值重载函数
36、关于纯虚函数和抽象类的描述中,不正确的是(a )。
A. 纯虚函数有函数实体,即有函数定义B. 抽象类不能创建其对象
C. 纯虚函数只有原型说明D. 抽象类是含有纯虚函数的类
37、当派生类中有内嵌(即组合)对象时,派生类构造函数的执行顺序是(d )。
A. 先基类,后派生类,最后内嵌(即组合)对象
B. 先内嵌(即组合)对象,后基类,最后派生类
C. 先派生类,后基类,最后内嵌(即组合)对象
D. 先基类,后内嵌(即组合)对象,最后派生类
38、关于类和对象的描述,下列说法正确的是( b)。
A.类的成员函数的定义和类的定义不能分开写。
B.成员函数代码中,所有涉及对类的数据成员的操作都隐含了参数*this。
C.静态的成员函数不可以使
用对象名调用。switch case判断字符串
D.一个类中可以定义多个构造函数,而且所有的构造函数都将被执行。
39、类A 中有唯一的一个成员函数f,且f 是公有的静态或非静态成员函数,对于类A
的一个对象a,执行语句a.f(100);成功,那么f 的函数原型不可以是(b )。
A. A& f( int, int=50 ); B. void f(int& ) ;
C. const A * f(const int ); D. A f( const int&);
100 是个常量
40、下列对派生类的描述中,(c )是错误的。
A. 一个派生类可以作为另一个派生类的基类
B. 派生类至少应有一个基类;
C. 基类中成员的访问权限被派生类继承后都不改变
D. 派生类的成员除了自己定义的成员外,还包含了它的基类成员
41 给出以下定义:
char x[]="abcdefg";
char y[]={'a','b','c','d','e','f','g'}; 则正确的叙述为( c)。
A.数组x 和数组y 等价 B.数组x和数组y 的长度相同
C.数组x 的长度大于数组y 的长度 D.数组x的长度小于数组y 的长度
42、b若有语句int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则( )不是对a 数组元素的正
确引用(其中0≤i<10)。
A.p[i] B.*(*(a+i)) C.a[p-a] D.*(&a[i])
43、执行以下程序段后,m 的值为( a)。
int a[2][3]={{1,2,3},{4,5,6}}; int m,*p=&a[0][0];m=(*p)*(*(p+2))*(*(p+4));
A.15 B.14 C.13 D.12
44、函数重载的意义主要在于( a)。
A. 使用方便,提高可读性B. 提高执行效率
C. 减少存储空间开销D. 提高程序可靠性
45、下列关于this 指针的说法,哪个是正确的(d )。
A. this 指针一定指向常量型数据B. this指向的数据不可更改
C. 静态成员函数可以访问this指针D. this 指针本身可作为成员函数的返回值。
二、填空题
1、假定一个二维数组的定义为int a[4][5],则该数组所含元素的个数为__ 20__。
2、预处理命令在程序中都是以____# ___开头的。
3、执行cout<< char('E'+2)<<endl;语句后得到的输出结果是____G____。
4、面向对象系统最突出的特征是__封装____性、__继承__性和多态性。
6、C++源程序经过__编译____和__链接___后生成可执行程序。先编译,然后才是链接
7、使用标准的输入流cin 时,两个输入项之间用___>>___分隔。
8、类中的对象成员、_________和_________的初始化只能通过初始化参数表的形式进行初
始化。
9、C++中不可以重载的运算符有“.”、“.*”、_________和_________。
10、运算符的重载一般采用两种方式:重载为_________和_________。
11、使用“int *pa = new int[10];”定义一个有10 个元素的整型数组,使用__
delete []pa;______释放pa 指针指向的数组。
12、C++程序的内存格局通常分为四个区:__代码区______,该区用来存放类成员函数、其
它函数代码;__全局数据区______,该区用来存放全局变量、静态数据、常量;_栈区______,
该区用来存放局部变量、函
数参数、返回数据和返回地址;__堆区______,该区是自由存储
区。
13、设置虚基类的目的是_________。
14、类外部可以用p.a 的形式访问派生类对象p 的基类成员a,则a 应是_________。公有
继承的公有成员
15、若多个基类及其派生类中都定义了同名函数成员,要访问相应函数时,就需要在函数名
前加上_________和_________。
三、判断题
1、类的成员函数都应是公有的,而数据成员都应是私有的。错
2、用class 定义的类中,默认的访问权限是公有的。
错,用struct封装的结构体类型中,默认的访问权限才是公有的
3、运算符new 可以创建变量或对象,也可以创建数组。对
4、派生类不能再派生新的类。错,可以继续派生下去。
5、在公有继承中,派生类对象的成员函数可以访问基类中的私有成员。
错,只能访问基类中的公有成员。
6、运算符重载可以改变其结合性。错
7、函数参数个数和类型都相同,只是返回值类型不同,这不是重载函数。对
8、C++中的模板分为函数模板和类模板两种。对
9、const int *p 说明不能修改p指针。错,可以的。但是不能利用p 指针间接修改
所指的内存变量中的值。
10、一个类的所有公共成员信息构成了它对外界的接口。
对,公共的成员函数就是interface
11、在C++中,China和china将被视作两个不同的变量。对,C++ 对大小写敏感
12、定义对象引用时,系统会自动调用对应类的构造函数。
错,定义对象的引用,只是给同一个对象另外起一个别名,不是新创建一个对象,
所以不会调用构造函数
13、static关键字可以延长局部变量的生存期。
对,局部变量的生存周期只在定义该变量的函数内部。出了该函数的范围,则自
动消失。但使用static 进行修饰后,则生存周期编程整个程序的运行周期。
14、static关键字可以扩大全局变量的作用域。(应该是缩小了)
错,局部变量出了作用域变量值就没有了, 但静态变量(静态全局或者静态局
部)的变量值一直存在,直到程序终止,只不过仅能在定义该变量的源文件中或
者函数中使用这个变量,其他文件不能使用。静态全局变量也具有全局作用域,
它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件
里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。
这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的
变量。
15、C++允许使用友元,但是友元会破坏封装性。对
16、友元函数可以通过使用this 指针直接访问类的私有成员。错,
友元函数是非成员函数,所以它无法通过this指针获得一份拷贝,因此

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。