admin管理员组

文章数量:1667329

2023年12月26日发(作者:)

【章节】第1章 C++基础知识

【知识点】

1、 C++程序的构成与书写形式;

2、 基本数据类型,常量、变量和表达式

3、 C++的标准输入输出

【单选题】

1、在C++中,源程序变为可执行程序的正确顺序应该是( ) 。

A. 编辑、链接、编译、执行 B. 编辑、编译、链接、执行

C. 编译、编辑、链接、执行

D. 编译、链接、编辑、执行

答案:B

2、 要把高级语言编写的源程序转换为目标程序,需要使用( ) 。

A. 编辑程序

B. 驱动程序

C. 调试程序

D. 编译程序

答案:D

3、下列关于C++与C语言的关系描述中,错误的是( ) 。

A. C语言是C++语言的一个子集

B. C++与C语言是兼容的

C. C++对C语言进行了一些改进

D. C++和C语言都是面向对象的

答案:D

4、下面为使用面向对象语言的正确理由是( ) 。

A. 面向对象程序由三种基本结构组成,分别是顺序结构、选择结构和循环结构

B. 程序语句比面向过程语言简单

C. 面向对象程序设计可以设计为自行修改错误

D. 面向对象程序很容易概念化

答案:D

5、以下选项中,合法的用户标识符是( ) 。

A. long

B. _2Test

C. 3Dmax

D.

答案:B

6、下列描述中正确的是( ) 。

A. 不是每个C++程序都必须包含预处理命令#include

B. C++程序必须有return 语句

C. C++程序中的变量必须定义在主程序内部

D. C++程序中所使用的符号常量可以不进行定义

答案:A

7、C++源程序文件的扩展名为( ) 。

A. .CPP

B. .C

C. .DLL

D. .EXE

答案:A

8、cout是I0流库预定义的( ) 。

A. 类

B. 对象

C. 包含文件

D. 常量

答案:B

9、 C++对C语言作了很多改进,即从面向过程变成为面向对象的主要原因是( )

A. 增加了一些新的运算符

B. 允许函数重载,并允许设置缺省参数

C. 规定函数说明符必须用原型

D. 引进了类和对象的概念

答案:D

10、下列选项中,( ) 是不合法的标识符.

A. Program

B. Obj23

C. double

D. B_C_D

答案:C

11、下列标识符中,不合法的用户标识符为( ) 。

A. a~!

B. _int

C. a_10

D. PAd

答案:A

12、只能向终端输出一个字符的函数是( ) 。

A. pringf函数

B. putchar函数

C. getchar函数

D. scanf函数

答案:B

13、如果有整型量 int x = 5,执行情况x += 1.9 后x的值为( ) 。

A. 6

B. 7

C. 结果不确定

D. 表达式非法

答案:A

14、已知a=5,b=3,表达式 a+=a*=++b*3的值为( ) 。

A. 40

B. 80

C. 100

D. 120

答案:D

20、在C++语言中,自定义的标识符( ) 。

A. 能使用关键字并且不区分大小写

B. 不能使用关键字并且不区分大小写

C. 能使用关键字并且区分大小写

D. 不能使用关键字并且区分大小写

答案:D

32、C++语言程序的基本单位是( ) 。

A. 程序行

B. 语句

C. 函数

D. 字符

答案:B

38、下列符号属于c++语言用户标识符的是( )。

A. DO

B. if

C. void

D. switch

答案:A

39、任意一个类,析构函数的个数最多是( )。

A. 不限个数

B. 1

C. 2

D. 3

答案:B

【章节】 第3章 函数

【知识点】

1、C++函数的相关知识

2、函数定义与函数的调用

3、内联函数与函数重载

【单选题】

1、若有以下函数调用语句,在此函数调用语句中实参的个数是( )

fun(a+b,(y=10,y),fun(n,k,d));

A. 3

B. 4

C. 5

D. 6

答案:A

2、以下程序的运行结果是( ) 。

func(int a,int b)

{ static int m,i=2;

i+=m+1;

m=i+a+b;

return(m);

}

int main()

{ int k=4,m=1,p;

p=func(k,m);

cout<

p=func(k,m);

cout<

}

A. 8,17

B. 8,16

C. 8,20

D. 8,8

答案:A

3.以下函数调用语句中,含有的实参个数是( ).

func(rec1,rec2 +1,(rec3,rec4));

A. 3

B. 4

C. 5

D. 有语法错误

[答案] A

4.分析如下程序:

#include

int f(int b[],int n)

{int i,r=1;

for(i=0;i<=n;i++)

r=r*b[i];

return r;

}

void main(){

int x,a[]={2,3,4,5,6,7,8,9};

x=f(a,3);

cout<

}

上面程序的输出结果是( ) 。

A. 720

B. 120

C. 24

D. 6

答案:B

5、下列函数参数默认值定义错误的是( )

A. Fun(int x, int y=0)

B. Fun(int x = 100)

C. Fun(int x = 0, int y)

D. Fun(int x = f( )) (假定函数f()已经定义)

答案:C

6、在函数定义前加上关键字“inline”表示该函数被定义为( ) 。

A. 重载函数

B. 内联函数

C. 成员函数

D. 普通函数

答案:B

7、一个函数功能不太复杂,但要求被频繁调用,选用( ) 。

A. 内联函数

B. 重载函数

C. 递归函数

D. 嵌套函数

答案:A

8、下面有关重载函数的说法中正确的是( ) 。

A. 重载函数必须具有不同的返回值类型

B. 重载函数形参个数必须不同

C. 重载函数必须有不同的形参列表

D. 重载函数名可以不同

答案:C

9、在C++语言中,对函数参数默认值描述正确的是( ) 。

A. 函数参数的默认值只能设定一个

B. 一个函数的参数若有多个,则参数默认值的设定可以不连续

C. 函数必须设定默认值

D. 在设定参数的默认值后,该参数后面定义的所有参数都必须设定默认值

答案:D

10、考虑函数原型 void test(int a,int b=7,char z='*'),下面的函数调用中,属于不合法调用的是

A. test(5);

B. test(5,8);

C. test(6,'#');

D. test(0,0,'*');

答案:C

11、以下对C++ 函数的有关描述中,正确的是( ) 。

A. C 调用函数时,只能把实参的值传给形参,形参的值不能传递给实参

B. C++函数既可以嵌套定义又可以递归调用

C. 函数必须有返回值,否则不能使用函数

D. C++程序中有调用关系的所有函数必须放在同一源程序文件中

答案:A

12、在C++语言中函数返回值的类型是由( )决定的。

A. 调用该函数时系统临时

B. return语句中的表达式类型

C. 定义该函数时所指定的函数类型

D. 调用该函数时的主调函数类型

答案:C

13、以下程序的输出结果是( ) 。

int func(int a,int b)

{ return a+b;}

int main()

{ int x=6,y=7,z=8,r;

r=func(func(x,y),z--);

cout<

}

A. 15

B. 20

C. 21

D. 31

答案:C

14、以下程序的输出结果是( ) 。

void fun(int a,int b,int c)

{ a=456;b=567;c=678;}

int main( )

{ int x=10,y=20,z=30;

fun(x,y,z);

cout<

}

A. 30,20,10

B. 10,20,30

C. 456,567,678

D. 678,567,456

答案:A

15、C++语言中,形参与实参之间的数据传递方式是( )

A. 只能按值传递

B. 只能按地址传递

C. 既可以按值传递也可以按地址传递

D. 以上说法都不对

答案:C

16、分析以下程序:

#include

void fun(int num){cout<

void fun(char ch){cout<<(ch+1)<

int main(){

fun('A');

return 0;

}

以上程序的输出结果是( ) 。

A. 65

B. 66

C. A

D. B

答案:B

17、一个函数为void f(int x, char y = ‘a’),另一个函数为void f(int),则它们( ) 。

A. 不能在同一程序块中定义

B. 可以在同一个程序块中定义并可重载

C. 可以在同一个程序块中定义,但不可以重载

D. 以上说法均不正确

答案:A

18、函数定义为Fun(int &i),变量定义n = 100,则下面调用正确的是( )

A. Fun(20)

B. Fun(20 + n)

C. Fun(n)

D. Fun(&n)

答案:C

19、当一个函数无返回值时,函数的类型应为( ) 。

A. 任意

B. void

C. int

D. char

答案:B

20、下列带缺省值参数的函数说明中,正确的说明是( ) 。

A. int Fun(int x,int y=2,int z=3);

B. int Fun(int x=1,int y,int z=3);

C. int Fun(int x,int y=2,int z);

D. int Fun(int x=1,int y,int z=3);

答案:A

21、下列函数参数默认值定义错误的是( ) 。

A. Fun(int x, int y=0)

B. Fun(int x = 100)

C. Fun(int x = 0, int y)

D. Fun(int x = f( )) (假定函数f( )已经定义)

答案:C

22、在函数定义前加上关键字“inline”表示该函数被定义为( ) 。 A. 重载函数

B. 内联函数

C. 成员函数

D. 普通函数

答案:B

23、一个函数功能不太复杂,但要求被频繁调用,选用( ) 。

A. 内联函数

B. 重载函数

C. 递归函数

D. 嵌套函数

答案:A

24、下面有关重载函数的说法中正确的是( ) 。

A. 重载函数必须具有不同的返回值类型

B. 重载函数形参个数必须不同

C. 重载函数必须有不同的形参列表

D. 重载函数名可以不同

答案:C

25、在C++语言中,对函数参数默认值描述正确的是( ) 。

A. 函数参数的默认值只能设定一个

B. 一个函数的参数若有多个,则参数默认值的设定可以不连续

C. 函数必须设定默认值

D. 在设定参数的默认值后,该参数后面定义的所有参数都必须设定默认值

答案:D

26、考虑函数原型 void test(int a,int b=7,char z='*'),下面的函数调用中,属于不合法调用的是( ) 。

A. test(5);

B. test(5,8);

C. test(6,'#');

D. test(0,0,'*');

答案:C

27、以下对C++ 函数的有关描述中,正确的是( ) 。

A. C 调用函数时,只能把实参的值传给形参,形参的值不能传递给实参

B. C++函数既可以嵌套定义又可以递归调用

C. 函数必须有返回值,否则不能使用函数

D. C++程序中有调用关系的所有函数必须放在同一源程序文件中

答案:A

28、在C++语言中函数返回值的类型是由( )决定的。

A. 调用该函数时系统临时

B. return语句中的表达式类型

C. 定义该函数时所指定的函数类型

D. 调用该函数时的主调函数类型

答案:C

29、以下程序的输出结果是( ) 。

int func(int a,int b)

{ return a+b;}

int main( )

{ int x=6,y=7,z=8,r;

r=func(func(x,y),z--);

cout<

}

A. 15

B. 20

C. 21

D. 31

答案:C

30、以下程序的输出结果是( ) 。

void fun(int a,int b,int c)

{ a=456;b=567;c=678;}

int main()

{ int x=10,y=20,z=30;

fun(x,y,z);

cout<

}

A. 30,20,10

B. 10,20,30

C. 456,567,678

D. 678,567,456

答案:A

【章节】第7章 类与对象

【知识点】

1、面向对象程序设计的基本概念

2、类定义、属性与行为、访问权限控制,对象的定义、使用

3、构造函数与析构函数

4、函数重载技术与运算符重载技术

5、友元

【单选题】

1、对于下面定义的类MyClass, 在函数f( )中将对象成员n的值修改为50的语句(划线处)应该是( ) 。

class MyClass

{

public:

MyClass(int x)

{

n=x;

}

void SetValue(int n1)

{

n=n1;

}

private:

int n;

};

int f( )

{

MyClass *ptr=new MyClass(45);

__________;

}

A. MyClass(50)

B. SetValue(50)

C. ptr - > SetValue(50)

D. ptr - > n=50

答案:C

分值:2

难度:1

知识点:

评析:

2、类MyClass的定义如下:

class MyClass

{

public:

MyClass()

{

value=0;

}

setVariable(int i)

{

value=i;

}

private:

int value;

};

则以下各项对如下语句序列的描述中,正确的是( ) 。

MyClass *p , my; p = &my;

A. 语句”p = &my;”是把对象my赋值给指针变量p

B. 语句”MyClass *p , my;”会调用两次类MyClass的构造函数

C. 对语句”*iable(5)”的调用是正确的

D. 语句”p - > SetVariable(5)”与语句”iable(5)”等价

答案:D

分值:2

难度:1

知识点:

评析:

3、 下面类的定义,有( )错误 。

class MyClass{

int i=0;

public: void MyClass(); ~MyClass(int Value);};

A. 1

B. 2

C. 3

D. 4

答案:C

分值:2

难度:1

知识点:

评析:

4、 定义析构函数时,应该注意( )。

A. 其名与类名完全相同

B. 返回类型是void类型

C. 无形参,也不可重载

D. 函数体中必须有delete语句。

答案:C

分值:2

难度:1

知识点:

评析:

5、 构造函数不具备的特征的是( )。

A. 构造函数的函数名与类名相同

B. 构造函数可以重载

C. 构造函数可以设置默认参数

D. 构造函数必须指定返回类型

答案:D

分值:2

难度:1

知识点:

评析:

6、 类的析构函数是在( )被自动调用的。

A. 类创建时

B. 创建对象时

C. 删除对象时

D. 不自动调用

答案:C

分值:2

难度:1

知识点:

评析:

7、 对于任何一个类,析构函数最多有( ) 个。

A. 0

B. 1

C. 2

D. 4

答案:B

分值:2

难度:2

知识点:

评析:

8、通常,拷贝构造函数的参数是( )。

A. 某个对象名

B. 某个对象的引用名

C. 某个对象的成员名

D. 某个对象的指针名

答案:B

分值:2

难度:1

知识点:

评析:

9、 面向对象程序设计中的数据隐藏指的是( )。

A. 输入数据必须输入保密口令

B. 数据经过加密处理

C. 对象内部数据结构上建有防火墙

D. 对象内部数据结构的不可访问性

答案:D

分值:2

难度:1

知识点:

评析:

10、下列关于类的访问权限的描述中,错误的是( ).。

A. 说明为公有的成员可以被程序中的任何代码访问

B. 说明为私有的成员只能被类的成员和说明为友元类的成员函数访问

C. 说明为保护的成员,除了能被本身的成员函数和说明为友元类的成员函数访问外,该类的派生类的成员也可以访问

D. 类的所有成员都可以被程序中的任何代码访问

答案:D

分值:2

难度:1

知识点:

评析:

11、一个类的友元函数或友元类可以访问该类的( )。

A. 私有成员

B. 保护成员

C. 公有成员

D. 所有成员

答案:D

分值:2

难度:1

知识点:

评析:

12、下列关于成员函数特征的描述中,错误的是( )。

A. 成员函数一定是内联函数

B. 成员函数可以重载

C. 成员函数可以设置参数的默认值

D. 成员函数可以是静态的

答案:A

分值:2

难度:1

知识点:

评析:

13、下面对类中静态数据成员的描述中,正确的是( )。

A. 静态数据成员是类的所有对象共享的数据

B. 类的每个对象都有自己的静态数据成员

C. 类的不同对象有不同的静态数据成员

D. 静态数据成员不能通过类的对象调用

答案:A

分值:2

难度:1

知识点:

评析:

14、C++ 中对于类中定义的成员,其默认的访问权限为( )。

A. public

B. protected

C. private

D. static

答案:C

分值:2

难度:1

知识点:

评析:

15、类的析构函数的作用是( )。

A. 作为类的一般成员函数

B. 类的初始化

C. 对象的初始化

D. 对象扫尾处理

答案:D

分值:2

难度:1

知识点:

评析:

16、若有一个MyClass类,则执行语句”MyClass,a,b(2),*p;”后,自动调用该类的构造函数( )次。

A. 2

B. 3

C. 4

D. 5

答案:A

分值:2

难度:1

知识点:

评析:

17、C++ 对C语言作了很多改进,即从面向过程变成为面向对象的主要改进是( )

A. 增加了一些新的运算符

B. 允许函数重载,并允许设置缺省参数

C. 规定函数说明符必须用原型

D. 引进了类和对象的概念

答案:D

分值:2

难度:1

知识点:

评析:

18、类MyClass的定义如下:

class MyClass

{

public:

Myclass() {}

MyClass(int i) {value=new int (i);}

int* value;

};

若要对value赋值,则下面语句正确的是( )。

A. MyClass my; =10;

B. MyClass my; *=10;

C. MyClass my; my.*value=10;

D. MyClass my(10);

答案:D

分值:2

难度:1

知识点:

评析:

19、下面是对类MyClass的定义,对定义中语句描述正确的是(class MyClass

{

public:

void MyClass(int a) {X=a;} //①

int f(int a,int b) //②

{

X=a;

Y=b;

)。

}

int f(int a,int b,int c=0) //③

{

X=a;

Y=b;

Z=c;

}

static void g() {X=10;} //④

private:

int X,Y,Z;

};

A. 语句①是类MyClass的构造函数定义

B. 语句②是类和语句③实现类成员函数的重载

C. 语句④实现对类成员变量X的更新操作

D. 语句①、②、③和④都不正确

答案:D

分值:2

难度:1

知识点:

评析:

20、类aClass的定义如下:class aClass{public:aClass(){}aClass(int i){value=new

int(i);}int *value;}若要对类中的value赋值,则下面的语句中,正确的是 ( )。

A. aClass my; = 10;

B. aClass my;* = 10;

C. aClass my;my.*value = 10;

D. aClass my(10);

答案:D

分值:2

难度:1

知识点:

评析:

21、对于下面定义的类MyClass,在函数f()中将对象成员n的值修改为50的语句(划线处)应该是 ( )。

class MyClass

{

public:

MyClass(int x)

{

n=x;

}

void SetValue(int n1)

{

n=n1;

}

private:

int n;

};

int f()

{

MyClass *ptr=new MyClass(45);

__________;

}

A. MyClass(50)

B. SetValue(50)

C. ptr - > SetValue(50)

D. ptr - > n=50

答案:C

分值:2

难度:1

知识点:

评析:

22、类MyClass的定义如下:

class MyClass

{

public:

MyClass()

{

value=0;

}

setVariable(int i)

{

value=i;

}

private:

int value;

};

则以下各项对如下语句序列的描述中,正确的是( ).。

MyClass *p , my; p = &my;

A. 语句”p = &my;”是把对象my赋值给指针变量p

B. 语句”MyClass *p , my;”会调用两次类MyClass的构造函数

C. 对语句”*iable(5)”的调用是正确的

D. 语句”p - > SetVariable(5)”与语句”iable(5)”等价

答案:D

分值:2

难度:1

知识点:

评析:

23、类的析构函数是在( )被自动调用的?

A. 类创建时

B. 创建对象时

C. 删除对象时

D. 不自动调用

答案:C

分值:2

难度:1

知识点:

评析:

24、对于任何一个类,析构函数最多有( ) 个。

A. 0

B. 1

C. 2

D. 3

答案:B

分值:2

难度:1

知识点:

评析:

25、通常,拷贝构造函数的参数是( )。

A. 某个对象名

B. 某个对象的成员名

C. 某个对象的引用名

D. 某个对象的指针名

答案:C

分值:2

难度:3

知识点:

评析:

26、下列关于类的访问权限的描述中,错误的是( ).。

A. 说明为公有的成员可以被程序中的任何代码访问

B. 说明为私有的成员只能被类的成员和说明为友元类的成员函数访问

C. 说明为保护的成员,除了能被本身的成员函数和说明为友元类的成员函数访问外,该类的派生类的成员也可以访问

D. 类的所有成员都可以被程序中的任何代码访问

答案:D

分值:2

难度:1

知识点:

评析:

27、一个类的友元函数或友元类可以访问该类的( )。

A. 私有成员

B. 保护成员

C. 公有成员

D. 所有成员

答案:D

分值:2

难度:1

知识点:

评析:

28、下列关于成员函数特征的描述中,错误的是( )。

A. 成员函数一定是内联函数

B. 成员函数可以重载

C. 成员函数可以设置参数的默认值

D. 成员函数可以是静态的

答案:A

分值:2

难度:1

知识点:

评析:

29、下面对类中静态数据成员的描述中,正确的是( ) A. 静态数据成员是类的所有对象共享的数据

B. 类的每个对象都有自己的静态数据成员

C. 类的不同对象有不同的静态数据成员

D. 静态数据成员不能通过类的对象调用

答案:A

分值:2

难度:1

知识点:

评析:

30、C++中对于类中定义的成员,其默认的访问权限为( ) A. public

B. protected

C. private

D. static

答案:C

分值:2

难度:1

知识点:

评析:

31、类的析构函数的作用是( )。

A. 作为类的一般成员函数

B. 类的初始化

C. 对象的初始化

D. 对象扫尾处理

答案:D

分值:2

难度:2

。。

知识点:

评析:

32、若有一个MyClass类,则执行语句”MyClass,a,b(2), *p ;”后,自动调用该类的构造函数( )次。

A. 2

B. 3

C. 4

D. 5

答案: A

分值:2

难度:1

知识点:

评析:

33、类MyClass的定义如下:

class MyClass

{

public:

Myclass() { }

MyClass(int i) {value=new int (i);}

int* value;

};

若要对value赋值,则下面语句正确的是( )。

A. MyClass my; =10;

B. MyClass my; *=10;

C. MyClass my; my.*value=10;

D. MyClass my(10);

答案:D

分值:2

难度:1

知识点:

评析:

34、下面是对类MyClass的定义,对定义中语句描述正确的是(

class MyClass

{

public:

void MyClass(int a) {X=a;} // ①

int f(int a,int b) // ②

{

X=a;

Y=b;

}

int f(int a,int b,int c=0) // ③

{

X=a;

。 )

Y=b;

Z=c;

}

static void g() {X=10;} // ④

private:

int X,Y,Z;

};

A. 语句①是类MyClass的构造函数定义

B. 语句②是类和语句③实现类成员函数的重载

C. 语句④实现对类成员变量X的更新操作

D. 语句①、②、③和④都不正确

答案:D

分值:2

难度:1

知识点:

评析:

35、类aClass的定义如下:class aClass{public:aClass(){}aClass(int i){value=new

int(i);}int *value;}若要对类中的value赋值,则下面的语句中,正确的是( )。

A. aClass my; = 10;

B. aClass my;* = 10;

C. aClass my;my.*value = 10;

D. aClass my(10);

答案:D

分值:2

难度:1

知识点:

评析:

36、每个类( )构造函数。

A. 只能有一个

B. 只可有公有的

C. 可以有多个

D. 只可有缺省的

答案:C

分值:2

难度:1

知识点:

评析:

37、已知类A中的一个成员函数的说明如下:void Set(A &a);则该函数的参数“A &a”的含义是( )。

A. 指向A的指针为a

B. 将变量a的地址赋给类A

C. 类A对象引用a用作函数的形参

D. 变量A与a按位与后作函数参数

答案:C

分值:2

难度:3

知识点:

评析:

38、下列特性中,C与C++共有的是( )。

A. 继承

B. 封装

C. 多态性

D. 函数定义不能嵌套

答案:D

分值:2

难度:2

知识点:

评析:

39、假定AB为一个类,则执行AB x;语句时将自动调用该类的( ) A. 有参构造函数

B. 无参构造函数

C. 拷贝构造函数

D. 赋值构造函数

答案:B

分值:2

难度:1

知识点:

评析:

40、如果类A被说明成类B的友元,则( )。

A. 类A的成员即类B的成员

B. 类B的成员即类A的成员

C. 类A的成员函数不得访问类B的成员

D. 类B不一定是类A的友元

答案:D

分值:2

难度:1

知识点:

评析:

41、下列不是类的成员函数的是( )。

A. 构造函数

B. 析构函数

C. 友元函数

D. 拷贝构造函数

答案:C

分值:2

难度:1

知识点:

评析:

42、拷贝(复制)构造函数的作用是( )。

A. 进行数据类型的转换

B. 用对象调用成员函数

C. 用对象初始化对象

D. 用一般类型的数据初始化对象

答案:C

分值:2

难度:3

知识点:

评析:

43、若要把函数void f()定义为类aClass的友元函数,则应该在类aClass的定义中加入的语句是( ) 。

A. void f( );

B. static void f( );

C. friend f( );

D. friend void f( );

答案:D

分值:2

难度:1

知识点:

评析:

44、下列关于析构函数的描述中,错误的是( ) 。

A. 类中有且仅有一个析构函数

B. 析构函数可以有形参

C. 析构函数没有函数类型

D. 析构函数在对象消失时被自动执行

答案:B

分值:2

难度:2

知识点:

评析:

45、下面对静态数据成员的描述中,正确的是( )。

A. 静态数据成员可以在类体内进行初始化

B. 静态数据成员不可以被类的对象调用

C. 静态数据成员不能受private控制符的作用

D. 静态数据成员可以直接用类名调用

答案:D

分值:2

难度:1

知识点:

评析:

【阅读程序题】

1、写出下列程序的运行结果

#include

using namespace std;

class MyClass

{

public:

void DisplayMessage(const char*Text,int Type)

{

cout<<"Message:Text="<

cout<<"Text="<

}

void DisplayMessage(const char*Text,unsigned int Type)

{

cout<<"Message:Text="<

cout<<"Text="<

}

};

void main( )

{

unsigned char value=0;

MyClass my;

yMessage("Hello",value);

}

答案:Message:Text=HelloText=10

分值:5

难度:3

知识点:

评析:

2、写出下列程序的运行结果

#include

using namespace std;

class MyClass

{

int a,b;

public:

MyClass(int x=0,int y=0);

~MyClass();

};

MyClass::MyClass(int x,int y):a(x),b(y)

{

cout<<"This is a constructor!a+b="<

}

MyClass::~MyClass()

{

cout<<"This is a destructor!"<

}

void main()

{

MyClass x,y(10,20),z(y);

}

答案:

This is a constructor!a+b=0

This is a constructor!a+b=30

This is a destructor!

This is a destructor!

This is a destructor!

分值:5

难度:3

知识点:

评析:

3、写出下列程序的运行结果

#include

using namespace std;

class MyClass

{

public:

MyClass(int a)

{

X=a;

cout<<"This is "<

}

~MyClass()

{

cout<<"This is "<

}

private:

int X;

};

void main()

{

MyClass commonObj(1);

static MyClass staticObj(2);

}

答案:

This is 1's constuctor.

This is 2's constuctor.

This is 1's destructor.

This is 2's destructor.

分值:5

难度:3

知识点:

评析:

4、写出下列程序的运行结果

#include

using namespace std;

class MyClass

{

public:

MyClass();

void Print();

~MyClass();

private:

int i;

static int j;

};

int MyClass::j=0;

MyClass::MyClass()

{

cout<<"This is a constructor!"<

j+=10;

}

void MyClass::Print()

{

cout<<"The value of j is "<

}

MyClass::~MyClass()

{

cout<<"This is a destructor!"<

}

void main()

{

MyClass first,second;

();

();

}

答案:

This is a constructor!

This is a constructor!

The value of j is 20

The value of j is 20

This is a destructor!

This is a destructor!

分值:5

难度:2

知识点:

评析:

5、写出下列程序的运行结果

#include

using namespace std;

class MyClass

{

char ch;

public:

MyClass();

MyClass(char character);

void Print();

~MyClass();

};

MyClass::MyClass()

{

cout<<"This is a constructor!"<

ch='a';

}

MyClass::MyClass(char character)

{

cout<<"This is a constructor!"<

ch=character;

}

void MyClass::Print()

{

cout<<"The value of ch is "<

}

MyClass::~MyClass()

{

cout<<"This is a destructor!"<

}

void main()

{

MyClass first,second('b');

();

();

}

答案:

This is a constructor!

This is a constructor!

The value of ch is a

The value of ch is b

This is a destructor!

This is a destructor!

分值:5

难度:3

知识点:

评析:

6、写出下列程序的运行结果

#include

using namespace std;

class A

{

int a,b;

public:

A(){a=b=0;}

A(int aa,int bb)

{

a=aa;b=bb;

cout<

}

};

void main( )

{

A x,y(2,3);

}

答案:2 3

分值:5

难度:3

知识点:

评析:

7、写出下列程序的运行结果

#include

using namespace std;

class Sample

{

int n;

public:

Sample(int i){n=i;}

void print()

{

cout<<"1:n="<

}

void print() const

{

cout<<"2:n="<

}

};

void main()

{

Sample a(10);

const Sample b(20);

();

();

}

答案:1:n=10,2:n=20

分值:5

难度:3

知识点:

评析:

【编程题】 选做

1、描述一个复数类Complex,私有数据为实部Real和虚部Image

要求Complex类包含如下成员函数:

(1)有构造函数,缺省时实部Real和虚部Imag置为0;

(2)void SetReal(double a)能修改Real的值;

(3)void SetImag(double b)能修改Imag的值;

(4)double GetReal()能取Real的值;

(5)double GetImag()能取Imag的值;

(6)重载运算符+,完成两个复数的加法。

答案:

#include

using namespace std;

class Complex{

double Real,Imag;

public:

Complex(double a=0,double b=0){

Real=a; Imag=b;}

void SetReal(double a){Real=a;}

void SetImag(double b){Imag=b;}

Double GetReal( ){return Real;}

double GetImag( ){return Imag;}

Complex operator +(Complex &a)

{

Complex t;

=Real+;

=Imag+;

return t;

}

};

【章节】第8章 继承与派生

【知识点】

1、继承的相关概念

2、派生类的构造与析构

3、继承的应用

【单选题】

1、 若类A和类B的定义如下:

class A

{

int i,j;

public:

int geti(){return i;}

};

class B: public A

{

int k;

public:

void make(){k=i*j;}

};

则上述中,( )是非法的表达式。

A. k=i*j

B. int k;

C. return i;

D. void make();

答案:A

分值:2

难度:1

知识点:

评析:

2、关于公有继承,下列说法错误的是( )。

A. 基类的公有成员和保护成员被继承后作为派生类的公有成员和保护成员。

B. 派生类的其他成员可以直接访问基类的公有成员和保护成员。

C. 派生类的对象可以访问基类的私有成员。

D. 派生类成员和对象都无法访问基类的私有成员。

答案:C

分值:2

难度:1

知识点:

评析:

3、下列说法中错误的是( )。

A. 公有继承时基类中的public成员在派生类中仍是public的;

B. 公有继承时基类中的private成员在派生类中仍是private的;

C. 私有继承时基类中的public成员在派生类中是private的;

D. 保护继承时基类中的public成员在派生类中是protected的;

答案:B

分值:2

难度:1

知识点:

评析:

4、 在公有继承中,基类中的公有成员作为派生类的( )。

A. 公有成员

B. 私有成员

C. 保护成员

D. 私有成员函数

答案:A

分值:2

难度:1

知识点:

评析:

5、基类中的( )不允许外界访问,但允许派生类的成员访问,这样既有一定的隐藏能力,又提供了开放的接口。

A. 公有成员

B. 私有成员

C. 保护成员

D. 私有成员函数

答案:C

分值:2

难度:1

知识点:

评析:

6、在下面的表达式中,不表示虚继承的是( )。

A. virtual public

B. public virtual

C. public

D. virtual

答案:C

分值:2

难度:1

知识点:

评析:

7、设置虚函数的声明中,正确的是( )。

A. 简化程序

B. 消除二义性

C. 提高运行效率

D. 减少目标代码

答案:B

分值:2

难度:1

知识点:

评析:

8、下面叙述错误的是( )。

A. 基类的protected成员在派生类中仍然是protected

B. 基类的protected成员在public派生类中仍然是protected的

C. 基类的protected成员在private派生类中是private的

D. 基类的protected成员不能被派生类的对象访问

答案:A

分值:2

难度:1

知识点:

评析:

9、派生类的对象对它的基类成员中( )是可以访问的。

A. 公有继承的公有成员

B. 公有继承的私有成员

C. 公有继承的保护成员

D. 私有继承的公有成员

答案:A

分值:2

难度:1

知识点:

评析:

10、下列对派生类的描述中,错误的是( )。

A. 一个派生类可以作为另一个派生类的基类

B. 派生类至少有一个基类

C. 派生类的缺省继承方式是private

D. 派生类只含有基类的公有成员和保护成员

答案:D

分值:2

难度:1

知识点:

评析:

11.、继承具有( ),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。

A. 规律性

B. 传递性

C. 重复性

D. 多样性

答案:B

分值:2

难度:1

知识点:

评析:

12、设有基类定义:

class Cbase

{ private: int a;

protected: int b;

public: int c;

};

派生类采用何种继承方式可以使成员变量b成为自己的私有成员( )。

A. 私有继承

B. 保护继承

C. 公有继承

D. 私有、保护、公有均可

答案:A

分值:2

难度:1

知识点:

评析:

13、多继承派生类构造函数构造对象时,( )被最先调用。

A. 派生类自己的构造函数

B. 虚基类的构造函数

C. 非虚基类的构造函数

D. 派生类中子对象类的构造函数

答案:B

分值:2

难度:1

知识点:

评析:

14、派生类的对象对它的哪一类基类成员是可以访问的?( )。

A. 保护继承的基类的公有成员

B. 公有继承的基类的保护成员

C. 公有继承的基类的私有成员

D. 公有继承的基类的公有成员

答案:D

分值:2

难度:1

知识点:

评析:

15、关于保护继承,下列说法错误的是( )。

A. 保护继承的特点是基类的所有公用成员和保护成员都成为派生类的保护成员。

B. 派生类对象不能访问基类中的任何成员。

C. 派生类的对象可以访问基类的公有成员。

D. 保护继承的派生类和私有继承的派生类,对基类成员访问属性是相同的。

答案:C

分值:2

难度:1

知识点:

评析:

16、关于私有继承,下列说法错误的是( )。

A. 基类的公有成员和保护成员被继承后作为派生类的私有成员,派生类的其他成员可以直接访问他们。

B. 基类的公有成员和保护成员被继承后作为派生类的私有成员,派生类的其他成员不能直接访问他们。

C. 基类的私有成员,派生类的成员和派生类的对象都无法访问。

D. 派生类的对象无法访问基类的所有成员。

答案:B

分值:2

难度:1

知识点:

评析:

17、在公有继承中,基类中的保护成员作为派生类的( )。

A. 公有成员

B. 私有成员

C. 保护成员

D. 私有成员函数

答案:C

分值:2

难度:1

知识点:

评析:

18、基类( )在派生类中的性质和继承的性质一样。

A. 公有成员

B. 私有成员

C. 保护成员

D. 私有成员函数

答案:A

分值:2

难度:1

知识点:

评析:

19.派生类的对象对它的基类成员中的( )是可以访问的。

A. 公有继承的公有成员

B. 公有继承的私有成员

C. 公有继承的保护成员

D. 私有继承的私有成员

答案:A

分值:2

难度:1

知识点:

评析:

20、下列虚基类的声明中,正确的是( )。

A. class virtual B: public A

B. virtual class B: public A

C. class B: public A virtual

D. class B: virtual public A

答案:D

分值:2

难度:1

知识点:

评析:

21、下列说法中错误的是( )。

A. 公有继承时基类中的public成员在派生类中仍是public的;

B. 公有继承时基类中的private成员在派生类中仍是private的;

C. 私有继承时基类中的public成员在派生类中是private的;

D. 保护继承时基类中的public成员在派生类中是protected的;

答案:B

分值:2

难度:1

知识点:

评析:

22、在公有继承中,基类中的公有成员作为派生类的( )。

A. 公有成员

B. 私有成员

C. 保护成员

D. 私有成员函数

答案:A

分值:2

难度:1

知识点:

评析:

23、基类中的( )不允许外界访问,但允许派生类的成员访问,这样既有一定的隐藏能力,又提供了开放的接口。

A. 公有成员

B. 私有成员

C. 保护成员

D. 私有成员函数

答案:C

分值:2

难度:1

知识点:

评析:

24、在下面的表达式中,不表示虚继承的是( )。

A. virtual public

B. public virtual

C. public

D. virtual

答案:C

分值:2

难度:1

知识点:

评析:

25、设置虚函数的声明中,正确的是( )。

A. 简化程序

B. 消除二义性

C. 提高运行效率

D. 减少目标代码

答案:B

分值:2

难度:1

知识点:

评析:

26、下面叙述错误的是( )。

A. 基类的protected成员在派生类中仍然是protected

B. 基类的protected成员在public派生类中仍然是protected的

C. 基类的protected成员在private派生类中是private的

D. 基类的protected成员不能被派生类的对象访问

答案:A

分值:2

难度:1

知识点:

评析:

27、派生类的对象对它的基类成员中( )是可以访问的。

A. 公有继承的公有成员

B. 公有继承的私有成员

C. 公有继承的保护成员

D. 私有继承的公有成员

答案:A

分值:2

难度:1

知识点:

评析:

28、下列对派生类的描述中,错误的是( )。

A. 一个派生类可以作为另一个派生类的基类

B. 派生类至少有一个基类

C. 派生类的缺省继承方式是private

D. 派生类只含有基类的公有成员和保护成员

答案:D

分值:2

难度:1

知识点:

评析:

29、继承具有( ),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。

A. 规律性

B. 传递性

C. 重复性

D. 多样性

答案:B

分值:2

难度:1

知识点:

评析:

30、设有基类定义:

class Cbase

{ private: int a;

protected: int b;

public: int c;

};

派生类采用何种继承方式可以使成员变量b成为自己的私有成员( ) A. 私有继承

B. 保护继承

C. 公有继承

D. 私有、保护、公有均可

答案:A

分值:2

难度:1

知识点:

评析:

【阅读程序题】

1、看程序写结果

#include

class A

{ public:

A(char *s) { cout<

~A() {}

};

class B:virtual public A

{ public:

B(char *s1, char *s2):A(s1)

{ cout<

};

class C: virtual public A

{

public:

C(char*s1,char *s2):A(s1)

{

cout<

}

};

class D:public B,public C

{public:

D(char *s1, char *s2,char *s3, char *s4):B(s1,s2),C(s1,s3),A(s1)

{

cout<

}

};

void main()

{

D *p=new D("class A","class B","class C","class D");

delete p;

}

答案:

创建D对象时,只有在D的构造函数的初始化列表中列出的虚基类构造函数被调用,D的两个基类B、C的构造函数中的虚基类构造函数被忽略,不执行,从而保证在D对象中只有一个虚基类子对象。

运行结果:

class A

class B

class C

class D

分值:5

难度:3

知识点:

评析:

2、看程序写结果

#include

class Base

{ int i;

public:

Base(int n){cout <<"Constucting base class" << endl;i=n;}

~Base(){cout <<"Destructing base class" << endl;}

void showi(){cout << i<< ",";}

int Geti(){return i;}

};

class Derived:public Base

{ int j;

Base aa;

public:

Derived(int n,int m,int p):Base(m),aa(p){

cout << "Constructing derived class" <

j=n;

}

~Derived(){cout <<"Destructing derived class"<

void show(){Base::showi();

cout << j<<"," << () << endl;}

};

void main()

{ Derived obj(8,13,24);

();

}

答案:

派生类的构造函数的执行次序,先调用基类的构造函数,再调用派生类中子对象类的构造函数,最后调用派生类的构造函数。析构函数的执行次序与构造函数正好相反,先调用派生类的析构函数,再调用派生类中子对象类的析构函数,最后调用基类的析构函数。

运行结果:

Constucting base class

Constucting base class

Constructing derived class

13,8,24

Destructing derived class

Destructing base class

Destructing base class

分值:5

难度:4

知识点:

评析:

3、看程序写结果

#include

class A

{ public:

A(char *s) { cout<

~A() {}

};

class B:virtual public A

{ public:

B(char *s1, char *s2):A(s1)

{ cout<

};

class C: virtual public A

{public:

C(char*s1,char *s2):A(s1)

{

cout<

}

};

class D:public B,public C

{

public:

D(char *s1, char *s2,char *s3, char *s4):B(s1,s2),C(s1,s3),A(s1)

{cout<

}

};

void main( )

{

D *p=new D("class A","class B","class C","class D");

delete p;

}

答案:

创建D对象时,只有在D的构造函数的初始化列表中列出的虚基类构造函数被调用,D的两个基类B、C的构造函数中的虚基类构造函数被忽略,不执行,从而保证在D对象中只有一个虚基类子对象。

运行结果:

class A

class B

class C

class D

分值:5

难度:4

知识点:

评析:

4、看程序写结果

#include

class Base

{ int i;

public:

Base(int n){cout <<"Constucting base class" << endl;i=n;}

~Base(){cout <<"Destructing base class" << endl;}

void showi(){cout << i<< ",";}

int Geti(){return i;}

};

class Derived:public Base

{ int j;

Base aa;

public:

Derived(int n,int m,int p):Base(m),aa(p){

cout << "Constructing derived class" <

j=n;

}

~Derived(){cout <<"Destructing derived class"<

void show(){Base::showi();

cout << j<<"," << () << endl;}

};

void main( )

{ Derived obj(8,13,24);

();

}

答案:

派生类的构造函数的执行次序,先调用基类的构造函数,再调用派生类中子对象类的构造函数,最后调用派生类的构造函数。析构函数的执行次序与构造函数正好相反,先调用派生类的析构函数,再调用派生类中子对象类的析构函数,最后调用基类的析构函数。

运行结果:

Constucting base class

Constucting base class

Constructing derived class

13,8,24

Destructing derived class

Destructing base class

Destructing base class

分值:5

难度:3

知识点:

评析:

5、写出下列程序运行结果:

#include

using namespace std;

class A

{int x;

public:

int z;

void setx(int i){x=i;}

int getx(){return x;}

};

class B: public A

{

int m;

public:

void setvalue(int a,int b,int c)

{

setx(c);

z=b;

m=a;

}

void display( )

{cout<

}

};

int main( )

{ B obj;

ue(2,3,4);

y();

return 0;

}

答案:4,3,2

分值:5

难度:3

知识点:

评析:

6、写出程序运行结果:

#include

using namespace std;

class base

{

public:

void who(){cout<<"base class"<

};

class derive1:public base

{public:

void who(){cout<<"derive1 class"<

};

class derive2:public base

{

public:

void who(){cout<<"derive2 class"<

};

void main()

{

base obj1;

();

derive1 obj2;

::who();

derive2 obj3;

::who();

}

答案:

base class

base class

base class

分值:5

难度:3

知识点:

评析:

7、阅读下列程序,写出程序运行结果。

#include

using namespace std;

class Base

{

int x;

public:

Base(int i)

{

x=i;

cout<<"Constuctor of Base"<

}

~Base(){cout<<"Destuctor of Base"<

void show(){cout<<"x="<

};

class Derived:public Base

{

Base d;

public:

Derived(int i):Base(i),d(i){cout<<"Constuctor of Derived"<

~Derived(){cout<<"Destuctor of Derived"<

};

int main()

{

Derived obj(5);

();

return 0;

}

答案:

Constuctor of Base

Constuctor of Base

Constuctor of Derived

x=5

Destuctor of Derived

Destuctor of Base

Destuctor of Base

分值:5

难度:4

知识点:

评析:

8、阅读下列程序,写出程序运行结果。

#include

using namespace std;

class Person

{

public:

Person(){cout<<"Constructor of Person"<

~Person(){cout<<"Destructor of Person"<

};

class Student:public Person

{

public:

Student(){cout<<"Constructor of Student"<

~Student(){cout<<"Destructor of Student"<

};

class Teacher:public Person

{

public:

Teacher(){cout<<"Constructor of Teacher"<

~Teacher(){cout<<"Destructor of Teacher"<

};

int main()

{

Student s;

Teacher t;

return 0;

}

答案:

Constructor of Person

Constructor of Student

Constructor of Person

Constructor of Teacher

Destructor of Teacher

Destructor of Person

Destructor of Student

Destructor of Person

分值:5

难度:3

知识点:

评析:

9、阅读下列程序,写出程序运行结果。

#include

using namespace std;

class data

{

public:

int x;

data(int n)

{

x=n;

cout<<"data"<

}

~data(){cout<<"data"<

};

class A

{data d1;

public:

A(int x):d1(x){ cout<<"A"<

void dispa( )

{

cout<

}

~A( ){ cout<<"A"<

};

class B:public A

{

data d2;

public:

B(int x):A(x-1),d2(x){ cout<<"B"<

~B(){ cout<<"B"<

void dispb( )

{

dispa();

cout<

}

};

int main()

{

B obj(5);

();

return 0;

}

答案:

data

A

data

B

4,5

B

data

A

Data

分值:5

难度:4

知识点:

评析:

10、阅读下列程序,写出程序运行结果。

#include

using namespace std;

class A

{

protected:

int x,y;

public:

A()

{x=3,y=4;

cout << "A() Constructor!" << endl;

}

A(int m,int n)

{

x=m,y=n;

cout << "A(int m,int n) Constructor!" << endl;

}

~A(){cout << "A Destructor!" << endl;}

};

class B : public A

{protected:

int i,j;

public:

B(int a,int b):A(a,b)

{ i=3,j=4;

cout << "B(int a,int b) Constructor!" << endl;

}

B(int a,int b,int m,int n):A(m,n)

{

i=a,j=b;

cout << "B(int a,int b,int m,int n) Constructor!" << endl;

}

~B( ){cout << "B Destructor!" << endl;}

void print()

{

cout<

}

};

int main()

{

B d(1,2);

();

return 0;

}

答案:

A(int m,int n) Constructor!

B(int a,int b) Constructor!

1 2 3 4

B Destructor!

A Destructor!

分值:5

难度:4

知识点:

评析:

11. 阅读下列程序,写出程序运行结果。

#include

using namespace std;

class A

{protected:

int x,y;

public:

A(int m=5,int n=6)

{

x=m,y=n;

}

};

class B : public A

{ protected:

int i,j;

public:

B(int a,int b)

{

i=a,j=b;

}

B(int a,int b,int m,int n):A(m,n)

{

i=a,j=b;

}

void print()

{

cout<

}

};

int main()

{

B d(1,2);

();

B c(1,2,3,4);

();

return 0;

}

答案:

5 6 1 2

3 4 1 2

分值:5

难度:5

知识点:

评析:

12、写出下列程序运行结果:

#include

using namespace std;

class A

{

int x;

public:

int z;

void setx(int i){x=i;}

int getx(){return x;}

};

class B: public A

{

int m;

public:

void setvalue(int a,int b,int c)

{

setx(c);

z=b;

m=a;

}

void display()

{

cout<

}

};

int main()

{

B obj;

ue(2,3,4);

y();

return 0;

}

答案:4,3,2

分值:5

难度:4

知识点:

评析:

13、写出程序运行结果:

#include

using namespace std;

class base

{

public:

void who(){cout<<"base class"<

};

class derive1:public base

{

public:

void who(){cout<<"derive1 class"<

};

class derive2:public base

{

public:

void who(){cout<<"derive2 class"<

};

void main()

{

base obj1;

();

derive1 obj2;

::who();

derive2 obj3;

::who();

}

答案:

base class

base class

base class

分值:5

难度:4

知识点:

评析:

14、阅读下列程序,写出程序运行结果。

#include

using namespace std;

class Base

{

int x;

public:

Base(int i)

{

x=i;

cout<<"Constuctor of Base"<

}

~Base(){cout<<"Destuctor of Base"<

void show(){cout<<"x="<

};

class Derived:public Base

{

Base d;

本文标签: 函数成员派生类