摘要:故本题正确答案为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

相关文章