C++填空、选择必练100题
摘要:故本题正确答案为B。答案:不具有的成员。
填空题
1
C++语言在给出逻辑运算结果时,以1代表“真”,以0代表“假”,但在判断一个量是否为“真”时,以代表“真”
答案
非0
2
C++的标识符由字母、____________和数字组成,而且第一个字符不能为数字。
答案
下划线
3
为了避免在嵌套的条件语句if-else中产生二义性,C++规定:else子句总是与______配对。
答案
其前面最近的if。本题考查if else语句。C语言规定,else总是与它前面的最近的if配对。
4
表达式x=x+1表示成增量表达式为________。
答案
++x或x++
5
设float x=-3.2;调用函数floor(x)的结果为____
答案
-4.0 。y = floor(x)。
则y等于:不大于x的最大整数。
6
表达式 3+5%(4 – 5/2) 的计算结果是_____。
答案
4
7
设有语句 int i=2,j=3, 执行语句 cout<<(i>=j?i+j:i-j); 后输出的值是________
答案
-1
8
若有说明语句:int x = 3, y = 0; 则以下循环语句结束时, y的值为____。 for(;x!=0;x- -) y+=3;
答案
9
9
执行语句:cout<<strlen(“con122th”); 后,显示的值为_____
答案
7
10
变量分为全局和局部两种,________变量没有赋初值时,将由系统自动置为0。
答案
全局
11
数组定义为 int a[4][5],则a[1]+3表示元素________的地址
答案
a[1][3]。a表示数组的首地址,可以把a数组看成是一个元素为一维数组的数组(把a看成一个由4个元素组成的数组,每个元素是一个由5个int型数组成的数组)。
a[i]和*(a+i)等价,所以a[i]+j和*(a+i)+j是a[i][j]的地址
12
C++语言中,变量的默认存储类型是______
答案
auto或自动变量。用auto(或省略)来区分说明的局部变量。当执行进入局部变量所在的块时,在栈上为变量分配存储,退出块时,存储单元被回收。
13
一个单目运算符作为类的成员函数重载时有个参数;如果作为独立函数重载,则有1个参数。
答案
0
14
若多个基类及其派生类中都定义了同名函数成员,要访问相应函数时,就需要在函数名前加上 和类区分符
答案
基类名
15
在保护继承中,基类中的、保护成员是可见的。
答案
公有成员
16
引进虚基类的根本目的是为了消除
答案
二义性
17
AA operator +(AA x )表示为运算符重载。
答案
+
18
若要使用string类,需要引入的头文件是
答案
string.h
19
int n=0; while(n=1)n++; while循环执行次数是
答案
无限次
while(n=1) 中,是 n=1,而不是 n==1。
在 C 语言中,= 是赋值,==是判断。
20
重载的运算符保持其原有的___、优先级和结合性不变。
答案
操作数
21
编译时的多态性通过___函数实现。
答案
重载 .编译多态性,实现的方法主要通过函数的重载或运算符的重载
22
预处理语句有三种,分别是宏定义、文件包含和___
答案
条件编译
23
派生类的成员一般分为两部分,一部分是___,另一部分是自己定义的新成员。
答案
从基类继承的成员
24
C++中ostream的直接基类___
答案
ios
25
若函数的定义处于调用它的函数之前,则在程序开始可以省去该函数的___语句。
答案
声明
26
执行下列代码
int i=230;
cout <<"i="<<hex <<i<<endl;
程序的输出结果为___。
答案
i=e6
27
在C++中有两种参数传递方式即值传递和___传递
答案
地址
28
使用new为int数组动态分配10个存储空间是
答案
new和 delete动态开辟空间和删除空间。new int[10],注意不要写成new
int(10),使用小括号只能开辟一个空间,使用10来初始化该值。
29
在switch语句中,每个语句标号所含关健字case后面的表达式必须是
答案
常量表达式
30
已知语句:char *p=”Hello! ”,则语句cout<<*p;输出的是__________
答案
H
31
假定a是一个一维指针数组,则a+i表示数据元素a[i]的
答案
地址
32
含随机函数的表达式rand()%20的值在 区间内
答案
用rand()的返回值(一个0-65535之间的数)对20求余,求余的结果就是0-19。也就是0~(20-1)之间。
如果我们要产生10~20之间的随机数,可以rand()%((20-10)+1)+10
含义是,20-10是产生0~9,((20-10)+1)是产生0~10,在这个基础上。再加10,就是10~20
33
指针变量pv和pc定义为“void *pv =”Hello, word!”; char pc[30];”,要将pv值赋给pc,则正确的赋值语句是_______
答案
pc=( char* )pv
34
若int a=10,则执行表达式a+=a*=a-=a/3后a的值为
答案
98
35
以下程序中
void main()
{ int i=0;
while(i<10)
{ if(i<1) continue;
if(i==5) break;
i++;
}
}
则while循环的循环次数是
答案
break语句只能在循环体和switch语句体内使用,当break出现在 switch语句体内时,其作用只是跳出该switch语句体。当break出现在循环体中,但不在 switch语句体内时,则在执行break后,跳出本层循环体。而continue语句的作用是结束本次循环,即跳过本次循环中余下尚未执行的语句,接着再一次进行循环的条件判定。本程序中,变量i的初始值为0,判断while后面括号内表达式的值为真,执行循环体内的if语句,判断if后面括号内表达式的值为真,执行“continue;”语句。因continue的作用是结束本次循环,即跳过本次循环体中余下尚未执行的语句,接着再一次进行循环的条件判断,所以i的值未发生变化,循环条件仍然为真,if语句也仍然成立,因此循环将无止境地进行下去。
36
若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定义时,其函数名前必须加上类名和两个________分隔符
答案
冒号
37
假定用户没有给一个名为AB的类定义析构函数,则系统为其定义的析构函数为
答案
隐含的析构函数。就是如下形式: AB::~AB( ) { }
38
若要保证一个公共的基类在派生类中只产生一个基类子对象,则必须都以_____的方式直接继承它
答案
虚基类。这样才不会产生二义性
39
重载插入运算符<<时,其运算符函数的返回值类型应当是________
答案
重载插入运算符<<时,其运算符函数的返回值类型应当是ostream 重载抽取运算符>>时,其运算符函数的返回值类型应当是istream
40
break语句只能用于循环语句和语句中
答案
switch
41
函数调用语句:fun((a,a+a),(c+d,d+e,e));,其中实参个数为
答案
2
42
假定所有变量均已正确说明,执行下述程序段后z的值是_ _________。
x=z=2,y=3;
if (x>y) z=1;
else if (x==y) z=0;
else z=-1;
答案
-1
43
int x;int *p2=&x,*p1=a;*p2=*b;则变量a和b的类型分别是
答案
int *和int *。p1的类型是int *
而a可以直接赋值给p1,而不是想x那样,说明a是指针,也就是int*.
int *p2=&x后 *p2 = x了
则*p = *b b和p的类型一样,也是 int*。
44
如果要把类B的成员函数void fun()说明为类A的友元函数,则应在类A中加入语句
答案
friend void fun()
45
声明一个参数为整型、无返回值、名为f的虚函数:
答案
virtual void f(int);
46
静态成员函数访问类的态数据成员,而非静态成员函数能访问类的非静态数据成员和静态数据成员
答案
只能
47
定义类的动态对象数组时,系统只能够自动调用该类的___构造函数对其进行初始化。
答案
无参。使用new创建对象数组,调用无参构造函数
48
this指针始终指向调用成员函数的___。
答案
对象
this指针是隐藏的指针,它指向调用函数的对象。
49
派生类的主要用途是可以定义其基类中___。
答案
答案:不具有的成员
[解析]继承的特点,扩充基类,即在派生类中增加基类不具有的成员。
50
类模板用来表达具有___的模板类对象集
答案
答案:相同处理方法
[解析]模板特点是不同的数据具有相同的处理方法的抽象。
选择题
01
下列有关类的说法不正确的是( )。
A. 对象是类的一个实例
B. 任何一个对象只能属于一个具体的类
C. 一个类只能有一个对象
D. 类与对象的关系和数据类型与变量的关系相似
答案
C
02
类的构造函数被自动调用执行的情况是在定义该类的( )
A. 对象时
B. 数据成员时
C. 成员函数时
D. 友元函数时
答案
A
03
下列表达方式正确的是( )。
A.class P
{public:
int x = 15;
void show(){cout<<x;}
};
B.class P
{public:
int x ;
void show(){cout<<x;}
}
C. class P
{int f;};
f=25
D. class P
{
public: int a;
void seta( int x){a=x;}
};
答案
D. 类体内不可对数据成员初始化;类定义结束时需用分号;只有类中的成员函数才能存取类中私有数据
04
复制构造函数具有的下列特点中,( )是错误的。
A. 如果一个类中没有定义复制构造函数时,系统将自动生成一个默认的
B. 复制构造函数只有一个参数,并且是该类对象的引用
C. 复制构造函数是一种成员函数
D. 复制构造函数的名字不能用类名
答案
D
05
对类的构造函数和析构函数描述正确的是( )。
A. 构造函数可以重载,析构函数也可以重载
B. 构造函数可以重载,析构函数不能重载
C. 构造函数不能重载,析构函数可以重载
D. 构造函数不能重载,析构函数也不能重载
答案
B
06
假设OneC为一个类,则该类的复制初始化构造函数的声明语句为( )。
A. OneC (OneC *p);
B. OneCl& (OneC p);
C. OneC(OneC p);
D. OneC (OneC & p);
答案
D
07
下面对静态数据成员的描述中,正确的是( )。
A. 静态数据成员是类的所有对象共享的数据
B. 类的每个对象都有自己的静态数据成员
C. 类的不同对象有不同的静态数据成员值
D. 静态数据成员不能通过类的对象调用
答案
A. C++规定对静态数据成员的初始化应该在类体外进行初始化。静态数据成员可由任意访问权限许可的函数或对象访问.在C++中,静态数据成员也可以定义为私有的静态数据成员。静态数据成员是类的所有对象共享的成员,即可以通过类名访问,也可以通过对象访问。但通过类名访问更方便、更高效。
08
假定一个类的构造函数为A(int aa,int bb){a=aa++;b=a*++bb;},则执行A x(4,5);语句后,x.a和x.b的值分别为( )。
A. 4和5
B. 4和20
C. 4和24
D. 20和5
答案
C
09
设有以下类的定义:
class Ex
{
int x;
public: void setx(int t=0);
};
若在类外定义成员函数setx(),以下定义形式中正确的是( )。
A. void setx(int t) { ... }
B. void Ex::setx(int t) { ... }
C. Ex::void setx(int t) { ... }
D. void Ex::setx(){ ... }
答案
B
10
下面关于友元的描述中,错误的是( )。
A. 友元函数可以访问该类的私有数据成员
B. 一个类的友元类中的成员函数都是这个类的友元函数
C. 友元可以提高程序的运行效率
D. 类与类之间的友元关系可以继承
答案
D
11
下列对派生类的描述中,( )是错误的。
A. 一个派生类可以作为另一个派生类的基类
B. 派生类至少有一个基类
C. 派生类的成员除了它自己的成员外,还包含了它的基类成员
D. 派生类中继承的基类成员的访问权限到派生类保持不变
答案
D
12
当派生类从一个基类保护继承时,基类中的一些成员在派生类中成为保护成员,这些成员在基类中原有的访问属性是( )。
A. 任何
B. 公有或保护
C. 保护或私有
D. 私有
答案
B
13
建立一个有成员对象的派生类对象时,各构造函数体的执行次序是( )。
A.派生类、成员对象类、基类
B.成员对象类、派生类、基类
C.基类、成员对象类、派生类
D.基类、派生类、成员对象类
答案
C
14
下列关于虚基类的描述中,错误的是( )。
A.使用虚基类可以消除由多继承产生的二义性
B.构造派生类对象时,虚基类的构造函数只被调用一次
C.声明“class B: virtual public A”说明B为虚基类
D.建立派生类对象时,首先调用虚基类的构造函数
答案
C.说明A是虚基类
15
下列有关继承和派生的叙述中,正确的是( )
A. 派生类对象不能访问基类的保护成员
B. 作为虚基类的类不能被实例化
C. 派生类应当向基类的构造函数传递参数
D. 虚函数必须在派生类中重新实现
答案
派生类可以访问基类的保护成员;抽象类不能被实例化,而作为虚基类的类能被实例化;虚函数不必在派生类中重新实现。故A、B、D错误,C项说法正确。
16
关于虚函数的描述中,( )是正确的。
A. 虚函数是一个静态成员函数
B. 虚函数是一个非成员函数
C. 虚函数既可以在函数说明时定义,也可以在函数实现时定义
D. 派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型
答案
D. 在基类中用virtual声明成员函数为虚函数,所以AB错误。在派生类中重新定义此函数,要求函数名、函数类型、函数参数个数和类型全部与基类的虚函数相同。
17
下列选择中,与实现运行时多态性无关的是( )。
A. 重载函数
B. 虚函数
C. 指针
D. 引用
答案
A
18
关于纯虚函数和抽象类的描述中,错误的是( )。
A. 纯虚函数是一种特殊的虚函数,它没有具体的实现
B. 抽象类是指具体纯虚函数的类
C. 一个基类中说明有纯虚函数,该基类派生类一定不再是抽象类
D. 抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出
答案
C.纯虚函数是在声明虚函数时被“初始化”为0的虚函数。不定义对象而只作为一种基本类型作为继承的类,称为抽象类。凡是包含纯虚函数的类都是抽象类。抽象类的作用是作为一个类族的共同基类。
19
在文件操作中,代表以追加方式打开文件的模式是( )。
A. ios::app
B. ios::ate
C. ios::out
D. ios::trunc
答案
本题考察的是流操作中的文件打开方式,有in,out和app分别表示读,写和追加
20
一个函数功能不太复杂,但要求被频繁调用,则应把它定义为( )。
A. 内联函数
B. 重载函数
C. 递归函数
D. 嵌套函数
答案
A
21
假设Class Y: public X,即类Y是类X的派生类,则说明一个Y类的对象时和删除Y类对象时,调用构造函数和析构函数的次序分别为( )。
A. X,Y;Y, X
B. X,Y;X,Y
C. Y,X;X,Y
D. Y,X;Y,X
答案
A. 派生类构造函数必须对这三类成员进行初始化,其执行顺序:调用基类构造函数
;调用子对象的构造函数;派生类的构造函数体。析构函数在执行过程中也要对基类和成员对象
进行操作,但它的执行过程与构造函数正好相反,即对派生类新增普通成员进行清理;调用成员
对象析构函数,对派生类新增的成员对象进行清理;调用基类析构函数,对基类进行清理,所以
选择A项。
22
下列不能作为类的成员的是( )。
A. 自身类对象的指针
B. 自身类对象
C. 自身类对象的引用
D. 另一个类的对象
答案
引用是C++中引入的新概念,可以理解为:看着像变量,实际同指针,故选项A和C相同,可以排除。在OO开发中,类之间的关系报重要,具体到程序中,类之间的关系就体现为类对象之间的has a或is a关系上,一个类对象作为另外一个类的成员是很常见的现象。自身类对象做类的成员将引起无限递归。故本题正确答案为B。
23
一个类的静态数据成员所表示属性 ( )。
A. 是类的或对象的属性
B. 只是对象的属性
C. 只是类的属性
D. 类和友元的属性
答案
C
24
假定AA为一个类,则执行 “AA obj(5,a);”语句时将自动调用该类的( )。
A. 带参构造函数
B. 无参构造函数
C.复制(拷贝)构造函数
D. 赋值重载函数
答案
其实这就是一个类的实例化问题,obj是类AA实例,创建对象的时候就是调用构造方法,而题目中构造方法带参数,可知调用的是带参的构造方法。a和5只是AB类的2个参数
25
在成员函数中进行双目运算符重载时,其参数表中应带有( )个参数。
A. 0
B. 1
C. 2
D. 3
答案
B. 作为非成员函数重载双目运算符是两个,一个是本类对象,一个是另一个操作数。
如果作为成员函数重载双目运算符,那么只有一个操作数,但此时,本类对象只能做左操作数。
26
C++的继承性允许派生类继承基类的( )。
A. 部分特性,但不允许增加新的特性或重定义基类的特性
B. 部分特性,并允许增加新的特性或重定义基类的特性
C. 所有特性,并允许增加新的特性或重定义基类的特性
D. 所有特性,但不允许增加新的特性或重定义基类的特性
答案
B.公有继承时基类中各成员属性保持不变,基类中private成员被隐藏。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象只能访问基类中的public成员。
私有继承时基类中各成员属性均变为private,并且基类中private成员被隐藏。派生类的成员也只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。
保护继承时基类中各成员属性均变为protected,并且基类中private成员被隐藏。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。
27
假设已经定义好了类student,现在要定义类derived,他是从student私有派生的,则下列定义derived的正确写法是( )。
A. class derived:student private{…}
B. class derived:student public {…}
C. class derived:student {…}
D. class derived: public student {…}
答案
C. C++默认继承方式是私有派生
28
采用重载函数的目的是( )。
A. 实现共享
B.减少空间
C.提高速度
D.使用方便,提高可读性
答案
D
29
要求打开文件D:file.dat,并能够写入数据,正确的语句是( )。
A.ifstream infile("D:file.dat", ios_base::in);
B.ifstream infile("D:file.dat", ios_base::out)
C.ofstream outfile("Dfile.dat", ios_base::in);
D.fstream infile("Dfile.dat", ios_base::in | ios_base::out);
答案
D
30
关于多继承二义性描述中,错误的是( )。
A.一个派生类的基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性
B.解决二义性的最常用的方法就是对成员名的限定法
C.基类和派生类同时出现的同名函数,也存在二义性问题
D.一个派生类是从两个基类派生出来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,可能出现二义性。
答案
本题考核多继承中出现的二义性问题。在多重继承的情况下,派生类具有两个以上的直接基类,而这些直接基类的一部分或全部又是从另一个共同基类派生而来时,这些直接基类中从上一级继承来的成员就拥有相同的名称。在派生类的对象中,这些同名成员在内存中同时有多个复制件,所以派生对这些同名成员的访问存在二义性。所以选项A和D的说法是正确的。 解决二义性的方法有两种:一是使用作用域分辨符来惟一标识并分别访问它们:二是可以将共同基类设置为虚基类。而第一种方法最常用。所以选项B的说法是正确的。 基类和派生类中同时出现同名函数,符合支配规则,不存在二义性问题。所以选项 C的说法不正确。
31
下面描述中,正确的是( )。
A. 即使基类的构造函数没有参数,派生类也必须建立构造函数
B. virtual可以用来声明虚函数
C. 含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类
D. 静态数据成员可以通过成员初始化列表来初始化
答案
在基类中用virtual声明成员函数为虚函数,所以B是正确的。纯虚函数是在声明虚函数时被“初始化”为0的虚函数。纯虚函数是一种特殊的虚函数,它没有具体的实现,含有纯虚函数的类是抽象类。静态数据成员函数只能在类外进行初始化。
32
关于虚函数的描述中,正确的是( )。
A. 虚函数是一个静态成员函数
B. 虚函数即可以在函数说明定义,也可以在函数实现时定义
C. 派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型
D. 虚函数是一个非成员函数
答案
C. 本题考查虚函数的概念。虚函数是非静态的成员函数,它不能是友元函数,但可以在另一个类中被声明为友元函数。虚函数必须是类的成员函数,虚函数声明只能出现在类定义的函数原型声明中,而不能在成员函数的函数体实现的地方,一般要求基类中说明了虚函数后,派生类说明的虚函数应该与基类中虚函数的参数个数相等,对应参数的类型相同。如果不相同,则将派生类虚函数的参数类型强制转换为基类中虚函数的参数类型。
33
设有函数T Min(T x,T y){return (x<y?x:y);},其中T为模板类型,则下列语句中对该函数错误的使用是( )
A.Min(20,10);
B.Min(3.5,5.2);
C.Min(‘Y’,‘X’);
D.Sum("Y","X");
答案
D
34
编译时的多态性可以通过使用( )获得。
A.虚函数和指针
B.重载函数和析构函数
C.虚函数和对象
D.虚函数和引用
答案
C.采用一般类型的标示对象操作虚函数时,将采用静态联编方式调用虚函数。
35
下列程序的输出结果是()
#include <iostream.h>
void main()
{int n[][3]={10,20,30,40,50,60};
int (*p)[3];
p=n;
cout<<p[0][0]<<","<<*(p[0]+1)<<","<<(*p)[2]<<endl;}
A. 10,30,50
B. 10,20,30
C. 20,40,60
D. 10,30,60
答案
答案:B
解析:如果数组元素都是相同类型的指针,则称这个数组为指针数组。指针数组一般用于处理二
维数组。声明的格式为:<数据类型><(*变量名)><[元素个数]>。
p表示指向数组n的行指针。如果将指针的初始化(*p)[3]=b;地址的等价形式:
p+i p[i]*(p+i)都表示b数组第i+1行的第1个元素的首地址。
*(p+i)+jp[i]+j &p[i][j]都表示b数组第i+1行、第j+1列元素的地址。
值的等价形式:
*(*(p+i)+j) *(p[i]+j) p[i][j]都表示b数组第i+1、第j+1列元素的值。
所以题目分别访问p[0][0],p[0][1],p[0][2]。
36
使用地址作为实参传给形参,下列说法正确的是()
A. 实参是形参的备份
B. 实参与形参无联系
C. 形参是实参的备份
D. 实参与形参是同一对象
答案
答案:D
解析:(P51)地址作为实参,表示实参与形参代表同一个对象。如果实参是数值,形参也是普通
变量,此时形参是实参的备份。所以选择D项
37
关于this指针使用说法正确的是()
A. 保证每个对象拥有自己的数据成员,但共享处理这些数据的代码
B. 保证基类私有成员在子类中可以被访问。
C. 保证基类保护成员在子类中可以被访问。
D. 保证基类公有成员在子类中可以被访问。
答案
答案:A
解析:this指针是隐藏的,可以使用该指针来访问调用对象中的数据。基类的成员在派生
类中能否访问,与继承方式有关,与this没有关系。所以选择A项。
38
所谓多态性是指 ()
A. 不同的对象调用不同名称的函数
B. 不同的对象调用相同名称的函数
C. 一个对象调用不同名称的函数
D. 一个对象调用不同名称的对象
答案
答案:B
解析:多态性有两种静态多态性和动态多态性,静态多态性是指调用同名函数,由于参数
的不同调用不同的同名函数;动态多态性是指不同对象调用同名函数时,由于对象不同调用不同
的同名函数。 多态性肯定具有相同的函数名,所以选择B项。
39
要采用动态多态性,说法正确的是()
A. 基类指针调用虚函数
B. 派生类对象调用虚函数
C. 基类对象调用虚函数
D. 派生类指针调用虚函数
答案
答案:A
解析:使用基类的指针或引用,由指向或引用的对象来决定调用不同类的虚函数。所以选
择A。
40
下列有关模板和继承的叙述正确的是 ()
A. 模板和继承都可以派生出一个类系
B. 从类系的成员看,模板类系的成员比继承类系的成员较为稳定
C. 从动态性能看, 继承类系比模板类系具有更多的动态特性
D. 相同类模板的不同实例一般没有联系,而派生类各种类之间有兄弟父子等关系
答案
答案:D
解析:类是相同类型事物的抽象,具有不同的操作。而模板是不同类型的事物,具体相同
的操作的抽象。类模板的实例化后,各个对象没有任何关系。而类对象是通过派生、继承等关系
的关系。
41
以下有关继承的叙述正确的是 ()
A. 构造函数和析构函数都能被继承
B. 派生类是基类的组合
C. 派生类对象除了能访问自己的成员以外,不能访问基类中的所有成员
D. 基类的公有成员一定能被派生类的对象访问
答案
答案:C
解析:构造函数和析构函数不能被派生类继承,A项错误。派生类是基类的扩展,B项错。
派生类可以访问基类公有和保护类型的成员,不能访问基类私有成员。D项基类是公有的成员
,若采用私有继承,派生类对象不能直接访问。选择C项。
42
下列不具有访问权限属性的是()
A. 非类成员
B. 类成员
C. 数据成员
D. 函数成员
答案
答案:A
解析:类成员包括成员函数和数据成员,都可以使用访问权限public、private和protected来修
饰,而普通的变量不能使用访问权限来说明
43
在下列成对的表达式中,运算结果类型相同的一对是()
A. 7.0/2.0和7.0/2
B. 5/2.0和5/2
C. 7.0/2和7/2
D. 8/2和6.0/2.0
答案
答案:A
解析:小数默认的类型为double类型,整数除以整数结果是取整的结果。A、B、C和D项的第一项
分别是double、double、double和int类型的,第二项分别是double、int、int和double类型,所
以选择A项。
44
在面向对象的程序设计中,首先在问题域中识别出若干个 ()
A. 函数
B. 类
C. 文件
D. 过程
答案
答案:B
解析:面向过程的和面向对象都具有、函数、文件和过程这些概念,而面向对象程序才有
类和对象的特征。所以选择B。
45
类B是类A的公有派生类,类A和类B中都定义了虚函数func(),p是一个指向类A对象的指针
,则p->A::func()将()
A. 调用类A中的函数func()
B. 调用类B中的函数func()
C. 根据p所指的对象类型而确定调用类A中或类B中的函数func()
D. 既调用类A中函数,也调用类B中的函数
答案:A
解析:指向类成员指针的使用,A::func()是明确调用A类的func函数,所以不管p指向基
类或者派生类对象,都执行基类虚函数。注意p->A::func()和p->fun();进行区分。如果使用p-
>fun(),因为p指向派生类对象,由动态多态性可知要调用派生类的虚函数。
答案
答案:A
解析:指向类成员指针的使用,A::func()是明确调用A类的func函数,所以不管p指向基
类或者派生类对象,都执行基类虚函数。注意p->A::func()和p->fun();进行区分。如果使用p-
>fun(),因为p指向派生类对象,由动态多态性可知要调用派生类的虚函数。
46
以下基类中的成员函数表示纯虚函数的是 ()
A. virtual void vf(int)
B. void vf(int)=0
C. virtual void vf()=0
D. virtual void yf(int){}
答案
答案:C
解析:纯虚函数是特殊的虚函数,没有函数体,形式为:virtual返回类型函数名(形参
列表)=0;因此选C项。
47
当一个类的某个函数被说明为virtual时,该函数在该类的所有派生类中()
A. 都是虚函数
B. 只有被重新说明时才是虚函数
C. 只有被重新说明为virtual时才是虚函数
D. 都不是虚函数
答案
答案:A
解析:在基类声明为virtual的函数为虚函数,在派生类中只要有相同的函数(函数名相
同、返回值相同、形参类型和个数相同)即使不用virtual说明,也都是虚函数。
48
关于new运算符的下列描述中,错误的是()
A. 它可以用来动态创建对象和对象数组
B. 使用它创建的对象或对象数组可以使用运算符delete删除
C. 使用它创建对象时要调用构造函数
D. 使用它创建对象数组时必须指定初始值
答案
答案:D
解析: new创建的对象数组不能指定初始值,所以调用无参的构造函数,选择D项。
49
已知一函数的原型是:int f(int ,int =0,double =0.0);则下列函数中可以加以重载的是 ()
A. int f(int);
B. int f(int,int);
C. f(int,int,double);
D. f(int double);
答案
D
50
已知函数f的原型为: void f(int &a,char *b);
变量s,t的定义是:int s; char t[]=”ABCD”;
把s和t分别作为第一参数和第二参数来调用函数f,正确的调用语句是: ()
A. f(&s,&t);
B. f(&s,t);
C. f(s,t);
D. f(s,&t);
答案
C