C++程序设计语言

1.

在关键字private 后面定义的成员为类的( )成员。

A

私有

B

公用

C

保护

D

任何

参考答案

A

2.

以下关于函数模板叙述正确的是( )。

A

函数模板也是一个具体类型的函数

B

函数模板的类型参数与函数的参数是同一个概念

C

通过使用不同的类型参数,函数模板可以生成不同类型的函数

D

用函数模板定义的函数没有类型

参考答案

C

3.

C++ 语言的编译系统对宏命令的处理是( )。

A

在程序运行时进行

B

在程序连接时进行

C

C++程序的其它语句同时进行编译

D

在对源程序中其它成分正式编译之前进行

参考答案

D

4.

软件产品在需求发生变化、运行环境发生变化或发现软件产品本身的错误或不足时进行相应的软件更新的难易程度叫做软件的( )。

A

可维护性

B

可复用性

C

兼容性

D

正确性

参考答案

A

5.

采用重载函数的目的是( )。

A

实现共享

B

减少空间

C

提高速度

D

使用方便, 提高可读性

参考答案

D

6.

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

A

公有继承的公有成员

B

公有继承的私有成员

C

公有继承的保护成员

D

私有继承的公有成员

参考答案

A

7.

在公有继承的情况下,基类成员在派生类中的访问权限( )。

A

受限制

B

保持不变

C

受保护

D

不受保护

参考答案

B

8.

关于面向对象系统分析,下列说法中不正确的是( )。

A

术语面向对象分析可以用缩写OOA表示

B

面向对象分析阶段对问题域的描述比实现阶段更详细

C

面向对象分析包括问题域分析和应用分析两个步骤

D

面向对象分析需要识别对象的内部和外部特征

参考答案

B

9.

假定一个类对象数组为A[n] ,当离开它定义的作用域时,系统自动调用该类析构函数的次数为( )

A

0

B

1

C

n

D

n-1

参考答案

C

10.

关于函数的返回值说法正确的是( )。

A

return 语句返回时,只带回一值,其类型在函数定义时确定

B

其类型由调用表达式决定

C

函数可以没有返回值,这时在函数定义,函数的类型说明就没必要了

D

函数调用就要有返回值,否则调用就没意义了

参考答案

A

11.

假定AA为一个类, a 为该类公有的数据成员, px 为指向该类对象的一个指针, 则访问px 所指对象中数据成员a 的格式为( )。

A

px(a)

B

px[a]

C

px->a

D

px.a

参考答案

C

12.

有以下程序

#include <iostream.h>

void main( )

{ char *p[10]={"abc","aabdfg","dcdbe","abbd","cd"};

cout<<p[3]<<endl;}

执行后输出结果是(

A

dcdbe

B

abbd

C

abc

D

abb

参考答案

B

13.

友员的作用之一是(

A

提高程序的运行效率

B

加强类的封装

C

实现数据的隐蔽性

D

增加成员函数的种类

参考答案

A

14.

假定AA为一个类, int a() 为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为( )。

A

int AA::a()

B

int AA:a()

C

AA::a()

D

AA::int a()

参考答案

A

15.

下列关于函数的说法中,不正确的是( )。

A

在不同函数中可以使用相同的名字命名变量

B

形式参数是局部变量

C

在函数内部定义变量的作用域在本函数中

D

在一个函数内的复合语句中定义变量的作用域也是整个函数

参考答案

D

16.

使用派生类的主要原因是(

A

提高代码的可重用性

B

提高程序的运行效率

C

加强类的封装性

D

实现数据的隐藏

参考答案

A

17.

有以下程序段

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a,b;

b=p[5];

b 中的值是( )。

A

5

B

6

C

8

D

9

参考答案

B

18.

函数重载是指( )。

A

两个或两个以上的函数取相同的函数名,但形参的个数或类型不同

B

两个以上的函数取相同的名字和具有相同的参数个数,但形参的类型可以不同

C

两个以上的函数名字不同,但形参的个数或类型相同

D

两个以上的函数取相同的函数名,并且函数的返回类型相同

参考答案

A

19.

下列关于C++函数的说明中正确的是( )。

A

内联函数就是定义在另一函数体内部的函数。

B

函数体的最后一条语句必须是RETURN语句。

C

标准C++要求在调用一个函数之前,必须先声明其原型。

D

编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式。

参考答案

D

20.

假设已经定义好了类student ,现在要定义类derived ,它是从student 私有派生的, 则定义类derived 的正确写法是( )。

A

class derived :: student private{ // ,,,, .}

B

class derived :: student public { // ,,,, .}

C

class derived :: public student { // ,,,, .}

D

class derived :: private student{ // ,,,, .}

参考答案

D

21.

下面有关构造函数的描述中,正确的是( )。

A

构造函数可以带有返回值

B

构造函数的名字与类名完全相同

C

构造函数必须带有参数

D

构造函数必须定义,不能缺省

参考答案

B

22.

关于保护继承的说法正确的是( )。

A

基类的公有成员、私有成员可被子类继承下来,而且性质不变。

B

基类的公有成员、私有成员可被子类继承下来,而且性质改变为保护成员。

C

基类的公有成员、私有成员可被子类继承下来,而且性质均改变为私有成员。

D

基类的公有成员、私有成员可被子类继承下来,性质不变,私有成员不被继承。

参考答案

D

23.

下列对引用的陈述中不正确的是( )。

A

每一个引用都是其所引用对象的别名, 因此必须初始化

B

形式上针对引用的操作实际上作用于它所引用的对象

C

一旦定义了引用,一切针对其所引用对象的操作只能通过该引用间接进行

D

不需要单独为引用分配存储空间

参考答案

C

24.

当一个类对象离开它的作用域时,系统自动调用该类的( )

A

无参构造函数

B

带参构造函数

C

拷贝构造函数

D

析构函数

参考答案

D

25.

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

A

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

B

重载函数形参个数必须不同。

C

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

D

重载函数名可以不同。

参考答案

C

26.

C++中,继承方式有哪几种?(

A

1

B

2

C

3

D

4

参考答案

C

27.

假定指针变量p 定义为“ int *p=new int(100); ”,要释放p 所指向的动态内存,应使用语句( )。

A

delete p;

B

delete *p;

C

delete &p;

D

delete []p;

参考答案

A

28.

)不是构造函数的特征。

A

构造函数的函数名与类名相同;

B

构造函数可以重载;

C

构造函数可以设置缺省参数;

D

构造函数必须指定类型说明。

参考答案

D

29.

在声明类时,下面的说法正确的是( )。

A

可以在类的声明中给数据成员赋初值

B

数据成员的数据类型可以是register

C

private public protected 可以按任意顺序出现

D

没有用private public protected 定义的数据成员是公有成员

参考答案

C

30.

在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first ,队列长度为length ,则队尾(即最后一个)元素的位置为( )。

A

length+1

B

first+length

C

(first+length-1)%MS

D

(first+length)%MS

参考答案

C

31.

在一个被调用函数中,关于return 语句使用的描述, )是错误的。

A

被调用函数中可以不用 return 语句。

B

被调用函数中可以使用多个return 语句。

C

被调用函数中,如果有返回值,就一定要有return 语句。

D

被调用函数中,一个return 语句可返回多个值给调用函数。

参考答案

D

32.

C++ 源程序文件编译而成的目标文件的缺省扩展名为( )

A

cpp

B

exe

C

obj

D

lik

参考答案

C

33.

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

A

A的成员即类B 的成员。

B

B的成员即类A 的成员。

C

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

D

B不一定是类A 的友元。

参考答案

D

34.

假定AB为一个类,则执行“AB *px=new AB[n]; ”语句时调用该类无参构造函数的次数为( )

A

n

B

n-1

C

1

D

0

参考答案

A

35.

面向对象方法的多态性是指( )。

A

一个类可以派生出多个特殊类

B

一个对象在不同的运行环境中可以有不同的变体

C

针对一消息,不同的对象可以以适合自身的方式加以响应

D

一个对象可以是由多个其他对象组合而成的

参考答案

C

36.

关于封装,下列说法中不正确的是( )。

A

通过封装,对象的全部属性和操作结合在一起,形成一个整体

B

通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见)

C

通过封装,每个对象都成为相对独立的实体

D

通过封装,对象的属性都是不可见的

参考答案

D

37.

运算符重载是对已有的运算符赋予多重含义,因此( )。

A

可以对基本类型(如int 类型)的数据,重新定义“ +”运算符的含义

B

可以改变一个已有运算符的优先级和操作数个数

C

只能重载C++中已经有的运算符,不能定义新运算符

D

C++中已经有的所有运算符都可以重载

参考答案

C

38.

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

A

某个对象名

B

某个对象的成员名

C

某个对象的引用名

D

某个对象的指针名

参考答案

C

39.

构造函数是在( )时被执行的。

A

程序编译

B

创建对象

C

创建类

D

程序装入内存

参考答案

B

40.

假定AB为一个类,则执行“ AB r1=r2; ”语句时将自动调用该类的( )

A

无参构造函数

B

带参构造函数

C

赋值重载函数

D

拷贝构造函数

参考答案

D

41.

假定AB为一个类, 则执行AB x; 语句时将自动调用该类的( )

A

有参构造函数

B

无参构造函数

C

拷贝构造函数

D

赋值构造函数

参考答案

B

42.

C++类体系中,不能被派生类继承的有( )。

A

构造函数

B

虚函数

C

静态成员函数

D

赋值操作函数

参考答案

A

43.

下列常量中, )不是字符常量。

A

’ \005 ’

B

’\n ’

C

’c’

D

“ a”

参考答案

D

44.

有以下语句struct S{ int g;char h;} T;则下面叙述中不正确的是( )。

A

S 是结构体名

B

该结构体包含2 个成员

C

S struct 类型的变量

D

T struct S 类型的变量

参考答案

C

45.

下列( )的调用方式是引用调用。

A

形参和实参都是变量

B

形参是指针,实参是地址值

C

形参是引用,实参是变量

D

形参是变量,实参是地址值

参考答案

C

46.

对数组名作函数的参数,下面描述正确的是( )。

A

数组名作函数的参数,调用时将实参数组复制给形参数组。

B

数组名作函数的参数,主调函数和被调函数共用一段存储单元。

C

数组名作参数时,形参定义的数组长度不能省略。

D

数组名作参数,不能改变主调函数中的数据。

参考答案

B

47.

类中定义的成员默认为( )访问属性。

A

public

B

private

C

protected

D

friend

参考答案

B

48.

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

A

成员函数一定是内联函数

B

成员函数可以重载

C

成员函数可以设置缺省参数值

D

成员函数可以是静态的

参考答案

A

49.

面向对象软件开发中使用的OOA表示( )。

A

面向对象分析

B

面向对象设计

C

面向对象语言

D

面向对象方法

参考答案

A

50.

C++中,关于下列设置参数默认的描述中, )是正确的。

A

不允许设置参数的默认值。

B

设置参数默认值只能在定义函数时设置。

C

设置参数默认值时,应该是先设置右边的再设置左边的。

D

设置参数默认值时,应该全部参数都设置。

参考答案

C

51.

假定一个字符串的长度为n,则定义存储该字符串的字符数组的长度至少为( )。

A

n-1

B

n

C

n+1

D

n+2

参考答案

C

52.

下列定义中, )是定义指向数组的指针p

A

int *p[5]

B

int (*p)[5]

C

(int *)p[5]

D

int *p[ ]

参考答案

A

53.

以下说法中正确的是( )。

A

C++ 程序总是从第一个定义的函数开始执行

B

C++ 程序总是从main 函数开始执行

C

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

D

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

参考答案

B

54.

结构中定义的成员默认为( )访问属性。

A

public

B

private

C

protected

D

friend

参考答案

A

55.

假定一个类AB只含有一个整型数据成员a,当用户不定义任何构造函数时,系统为该类定义的无参构造函数为( )

A

AB() {a=0;}

B

AB(int aa=0): a(aa) {}

C

AB(int aa): a(aa) {}

D

AB() {}

参考答案

D

56.

关于静态成员的描述中, )是错误的。

A

静态成员可分为静态数据成员和静态成员函数

B

静态数据成员定义后必须在类体内进行初始化

C

静态数据成员初始化不使用其构造函数

D

静态数据成员函数中不能直接引用非静态成员

参考答案

B

57.

关于内联函数说法错误的是( )。

A

不是任何一个函数都可定义成内联函数

B

内联函数的函数体内不能含有复杂的结构控制语句

C

递归函数可以被用来作为内联函数

D

内联函数一般适合于只有1 5 行语句的小函数

参考答案

C

58.

假设OneClass 为一个类,则该类的拷贝初始化构造函数的声明语句为( )。

A

OneClass(OneClass p);

B

OneClass& (OneClass p);

C

OneClass(OneClass & p);

D

OneClass (OneClass *p);

参考答案

C

59.

下面有关友员函数的描述中,正确的说法是(

A

友员函数是独立于当前类的外部函数

B

一个友员函数不可以同时定义为两个类的友员函数

C

友员函数必须在类的外部进行定义

D

在类的外部定义友员函数时必须加上friend 关键字

参考答案

A

60.

假定一个类的构造函数为B(int x,int y){a=x--;b=a*y--;} 则执行B x(3,5) 语句后, x.a x.b 的值分别为( )

A

3 5

B

5 3

C

3 15

D

20 5

参考答案

C

61.

下列静态数据成员的特性中, )是错误的。

A

说明静态数据成员时前边要加修饰符static

B

静态数据成员要在类体外进行初始化

C

静态数据成员不是所有对象所共用的

D

引用静态数据成员时,要在其名称前加<类名>和作用域运算符

参考答案

C

62.

下面标识符中正确的是( )

A

_abc

B

3ab

C

int

D

+ab

参考答案

A

63.

假定变量x 定义为“ int x=5; ”,要使rx 成为x 的引用(别名),rx 应定义为( )。

A

int rx=x;

B

int rx=&x;

C

int *rx=&x;

D

int &rx=x;

参考答案

D

64.

int b[][3]={{1},{3,2},{4,5,6},{0}};b[2][2] 的值是( )。

A

0

B

2

C

5

D

6

参考答案

D

65.

关于对象和类的关系,说法正确的是( )。

A

同属于一类的对象,具有相同的数据成员和成员函数。

B

对象是具体,是类的对象,同其他变量一样,先定义后使用。

C

同一类的不同对象,其具有的操作可不同,具体的操作也不同。

D

不同类的对象,可有相同的操作。

参考答案

C

66.

下面有关静态成员函数的描述中,正确的是(

A

在静态成员函数中可以使用this 指针

B

在建立对象前,就可以为静态数据成员赋值

C

静态成员函数在类外定义是,要用static 前缀

D

静态成员函数只能在类外定义

参考答案

B

67.

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

A

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

B

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

C

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

D

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

参考答案

C

68.

C++ 源程序文件的缺省扩展名为( )

A

cpp

B

exe

C

obj

D

lik

参考答案

A

69.

对于任一个类,用户所能定义的构造函数的个数至多为( )

A

0

B

1

C

2

D

任意个

参考答案

D

70.

假定AB为一个类,则( ) 为该类的拷贝构造函数的原型说明。

A

AB(AB x);

B

AB(int x);

C

AB(AB& x);

D

void AB(AB& x);

参考答案

C

1.

C++程序中初始化多维数组时,如果提供了数组的全部元素值,则可任意地选择省略其中一维的长度指定。

正确

错误

参考答案

错误

2.

C++程序中,定义了:fstream myf;后,即可以使用myf对象处理输入文件,也可以使用myf处理输出文件。

正确

错误

参考答案

正确

3.

C++程序中,要用二进制方式处理输入/输出文件,可以使用下面的语句序列打开指定文件。 fstream myf; myf.open("data",ios::in|ios::out|ios::binary);

正确

错误

参考答案

正确

4.

C++程序中,实现动态分配的运算符newdelete必须配合使用。

正确

错误

参考答案

正确

5.

将字符串数据:"This is a test string."作为string类型对象str的初始值,可以使用C++语句:string str("This is a test string.");

正确

错误

参考答案

正确

6.

C++程序中,可以使用表达式s1.empty()判断s1是否空串。

正确

错误

参考答案

正确

7.

使用字符数组方式处理字符串数据时,一不小心可能出现数组越界的错误,而且往往不太容易发现这类错误。

正确

错误

参考答案

正确

8.

C++程序中,如果要求将文件中的所有数据依次进行处理,则使用文件的顺序读写方式处理文件更为合理。

正确

错误

参考答案

正确

9.

C++程序中打开一个输入文件,文件的读位置指针在文件数据开始处。

正确

错误

参考答案

正确

10.

C++程序中,如果要求将文件中的所有数据依次进行处理,则使用文件的随机读写方式处理文件更为合理。

正确

错误

参考答案

错误

11.

C++程序中,默认情况下都是打开文本文件,处理二进制文件必须使用ios::binary指定。

正确

错误

参考答案

正确

12.

C++程序中可以使用C标准库中提供的字符分类标准函数,使用时需要用文件包含预处理命令将cctype头文件包含到源程序中。

正确

错误

参考答案

正确

13.

C++程序中,下面的语句序列可以正确打开和关闭指定文件。 fstream myf; myf.open("data",ios::in|ios::out); fclose(myf);

正确

错误

参考答案

错误

14.

C++程序中,要用文本方式处理输入/输出文件,可以使用下面的语句序列打开指定文件。 fstream myf; myf.open("data",ios::in|ios::out);

正确

错误

参考答案

正确

15.

C++程序中,可以通过输入文件流对象的get函数从数据文件中读取字符数据。

正确

错误

参考答案

正确

16.

C++中定义函数时,无论参数表如何表示,只要返回值类型不相同就能实现重载。

正确

错误

参考答案

错误

17.

如果一个函数是某个类的友元函数,那么这个函数可以访问该类对象的私有成员和保护成员。

正确

错误

参考答案

正确

18.

C++程序中,可以通过文件流对象的seekg移动文件的写位置指针。

正确

错误

参考答案

错误

19.

C++程序中,使用C函数malloc分配的空间可以使用delete运算符来释放。

正确

错误

参考答案

错误

20.

C++程序中,使用标准输入流对象cin无论与提取运算符>>配合还是与插入运算符<<配合,都可以实现程序中数据的操作。

正确

错误

参考答案

错误

21.

将字符串数据:"This is a test string."作为string类型对象str的初始值,可以使用C++语句序列: char s[]="This is a test string."; string str(s);

正确

错误

参考答案

正确

22.

C++程序中,创建动态一维数组时,必须要使用相应数据类型的一级指针来表示动态数组的起始地址。

正确

错误

参考答案

正确

23.

C++程序中,能够使用cin>>n;语句为变量n输入值的前提是:用文件包含预处理语句包含了iostream头文件,并且用using namespace std;语句导入了标准命名空间。

正确

错误

参考答案

正确

24.

C++程序中,输入任何数据都不能指定域宽,只能以实际输入的数据为准。

正确

错误

参考答案

错误

25.

C++程序中,可以通过文件流对象的tellg函数获取文件写位置指针与文件头之间的距离(字节数)。

正确

错误

参考答案

错误

26.

C++程序中,定义了:ofstream myf;后,可以使用myf对象处理输入文件。

正确

错误

参考答案

错误

27.

C++程序中,用文件流对象myf正确打开文本文件后,可用下面的循环结构显示文件中的所有(非空格)字符数据。 myf>>var; while(!inFile.eof()) { cout<>var; }

正确

错误

参考答案

正确

28.

C++程序中,可以通过输出文件流对象的put函数将字符数据写入到数据文件中。

正确

错误

参考答案

正确

29.

C++程序中,string类型对象之间可以直接进行赋值运算。

正确

错误

参考答案

正确

30.

C++程序中,使用文件流对象的open函数打开文件,使用文件流对象的close函数关闭文件。

正确

错误

参考答案

正确

31.

C++程序中,处理的文件类型主要分为文本文件和二进制文件。

正确

错误

参考答案

正确

32.

C++程序中,创建动态二维数组时,必须要使用相应数据类型的二级指针来表示动态数组的起始地址。

正确

错误

参考答案

正确

33.

设一正确定义了string对象mystr,要将字符串"I am a student."输入作为mystr的内容, 应该使用语句:cin>>mystr;

正确

错误

参考答案

错误

34.

C++程序中,可以通过文件流对象的tellp函数获取文件读位置指针与文件头之间的距离(字节数)。

正确

错误

参考答案

错误

35.

C++程序中,setprecision用于设定输出数据的有效位数,有效位数包含了数据的整数部分和小数部分。

正确

错误

参考答案

正确

36.

C++程序中,使用setw指定的域宽格式控制仅对紧跟在其后的输出数据项有效。

正确

错误

参考答案

正确

37.

C++程序中,因为不能用文件流对象做函数的形式参数,所以不能将文件处理部分编制成独立的函数。

正确

错误

参考答案

错误

38.

C++程序中, cin流对象的输入域宽控制也可以使用cin对象的width函数成员实现。

正确

错误

参考答案

正确

39.

C++程序中可以使用C标准库中提供的字符串处理标准函数,使用时需要用文件包含预处理命令将cstring头文件包含到源程序中。

正确

错误

参考答案

正确

40.

C++程序中,函数模板并不是一个真正意义上的函数,编译器不会为其产生任何可执行代码。

正确

错误

参考答案

正确

41.

C++程序中,可以通过输入文件流对象和提取操作符(>>)配合从数据文件中读出数据。

正确

错误

参考答案

正确

42.

C++程序中,对于两个string类型对象而言,复合赋值运算(+=)和连接运算(+)是完全相同的运算。

正确

错误

参考答案

错误

43.

C++程序中,除了可按照C的方式处理文件外,还可以使用C++的文件流类库来处理文件数据。

正确

错误

参考答案

正确

44.

C++语言中,函数模板本质上和函数的重载是相同的,可以相互替代。

正确

错误

参考答案

错误

45.

C++程序中,文件流对象做函数形参时应该使用文件流对象的引用形式。

正确

错误

参考答案

正确

46.

C++程序中,对二进制文件的读写常使用文件流对象的readwrite函数成员按数据块方式进行处理。

正确

错误

参考答案

正确

47.

C++程序中,可以通过文件流对象的seekp移动文件的读写位置指针。

正确

错误

参考答案

错误

48.

设有string类型对象s1,使用s1.clear()可以清楚s1中的所有字符内容。

正确

错误

参考答案

正确

49.

C++程序中,可以通过输出文件流对象和插入操作符(<<)配合将数据写入到数据文件中。

正确

错误

参考答案

正确

50.

C++程序中,内联函数调用的实现不需要系统付出任何代价。

正确

错误

参考答案

错误

1.

执行int p=new int 操作得到的一个动态分配的整型对象为________

参考答案

*p

2.

重载一个函数的条件是:该函数必须在参数的个数或参数的__________上与其它同名函数有所不同。
 

参考答案

类型

3.

每个对象都是所属类的一个__________

参考答案

实例

4.

C++语言的编译单位是扩展名为____________________文件。

参考答案

cpp;程序

5.

C++提供的预处理命令有宏定义命令,条件编译命令和____________

参考答案

文件包含命令

6.

对象将其大部分实现细节隐藏起来,这种机制称为__________

参考答案

封装

7.

如果一个函数直接或间接地调用自身,这样的调用称为____________调用。

参考答案

递归

8.

如果一个派生类的基类不止一个,则这种继承称为____________

参考答案

多继承(或多重继承)

9.

当执行cin 语句时, 从键盘上输入每个数据后必须接着输入一个________符,然后才能继续输入下一个数据。
 

参考答案

空白

10.

在函数模板的参数中,用class 修饰的参数称为__________参数。

参考答案

虚拟类型( 或类型)

11.

定义一个函数模板要用到的第一个修饰符是____________

参考答案

template

12.

基类和派生类的关系称为__________

参考答案

继承

13.

C++语言是在_________语言的基础上发展起来的。

参考答案

C

14.

局部变量具有局部生存期,存放在内存的____________区中。

参考答案

15.

C++中,编译时的多态性是通过__________实现的,而运行时的多态性则是通过__________实现的。
 

参考答案

重载;虚函数

16.

当执行cout 语句输出endl 数据项时,将使C++显示输出屏幕上的光标从当前位置移动到________的开始位置。
 

参考答案

下一行

17.

执行char *p=new char( ’a’) 操作后, p 所指向的数据对象的值为________

参考答案

’a’

18.

C++程序运行时的内存空间可以分成全局数据区,堆区,栈区和__________

参考答案

代码区(程序区)

19.

C++程序中包含一个头文件或程序文件的预编译命令为__________

参考答案

#include

20.

一个函数的函数体就是一条_________语句。

参考答案

复合

21.

C++中存储字符串” a+b=c”至少需要________个字节。

参考答案

6

22.

执行new char[m][n] 操作时的返回值的类型为________

参考答案

char(*)[n]

23.

定义外部变量时,不用存储类说明符_________,而声明外部变量时用它。

参考答案

extern

24.

enum Printstatus{ready=2,busy,error}; cout<<busy 的输出结果是________
 

参考答案

3

25.

enum Printstatus{ready,busy,error}; cout<<busy 的输出结果是_______

参考答案

1

26.

C++支持两种多态性: _________时的多态性和__________时的多态性。

参考答案

编译;运行

27.

全局变量和静态局部变量具有静态生存期,存放在内存的____________区中。

参考答案

全局数据

28.

用于输出表达式值的标准输出流对象是_________

参考答案

cout

29.

用于从键盘上为变量输入值的标准输入流对象是________

参考答案

cin

30.

C++中存储字符串” abcdef ”至少需要________个字节。

参考答案

7

1.

写出下列程序的运行结果。

#include <iostream.h>

void main()

{

int x;

int &p=x;

x=10;

p=x+10;

cout<<x<<","<<p<<endl;

}

参考答案

20,20

2.

写出下列程序的运行结果。

#include <iostream.h>

void Fun()

{

int num=20;

cout<<"The Fun's num is"<<num<<endl;

}

void main()

{

int num=10;

cout<<"The main's num is "<<num<<endl;

Fun();

{

int num=30;

cout<<"The Field's num is "<<num<<endl;

}

cout<<"The main's num is "<<num<<endl;

}

参考答案

The main's num is 10

The Fun's num is 20

The Field's num is 30

The main's num is 10

3.

请写出如下程序的输出结果:

#include <iostream.h>

int a[]={2,4,6,8,10};

int &index(int i)

{ return a[i];

}

void main()

{

int i;

index(3)=12;

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

cout<<a[i]<<" ";

}

参考答案

2 4 6 12 10

4.

阅读程序,写出运行结果。

#include <iostream.h>

int a=5;

void fun(int b)

{

static int a=10;

a+=b++;

cout<<a;

}

void main( )

{

int c=20;

fun(c);

a+=c++;

cout<<a<<endl;

}

参考答案

3025

5.

写出以下程序的运行结果。

#include <iostream.h>

int fun(int a)

{

int b=0;

static int c=3;

b++; c++;

return(a+b+c);

}

main()

{

int i, a=5;

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

cout<<i<<" "<<fun(a)<<" ";

}

参考答案

0 10 1 11 2 12

6.

阅读下面程序,写出输出结果。

#include <iostream>

using namespace std ;

class A

{

int a, b;

public :

A() { a = b = 0; }

A( int aa, int bb)

{

a = aa;

b = bb;

cout << a << ' ' << b << endl ;

}

};

int main()

{

A x, y(2,3);

return 0;

}

参考答案

2

3

7.

请写出如下程序的输出结果:

#include <iostream.h>

void Swap( int &a, int & b);

void main()

{

int x( 10 ), y( 7 );

cout<<"x="<<x<<" y="<<y<<endl;

Swap( x , y );

cout<<"x="<<x<<" y="<<y<<endl;

}

void Swap(int & a, int & b)

{ int temp; temp = a ; a=b ; b=temp ; }

参考答案

x=10 y=7

x=7 y=10

8.

若有以下程序:

#include <iostream>

using namespace std ;

class Base

{

public :

void Fun() { cout << "1" << endl ;}

};

class Derived : public Base

{

public :

void Fun() { cout << "2" << endl ; }

};

int main()

{

Derived a;

Base * p;

p=&a;

p-> Fun();

a. Fun();

return 0;

}

上面程序的输出结果为:

参考答案

1

2

9.

请写出如下程序的输出结果:

#include <iostream.h>

class R

{

public:

R(int r1,int r2) {R1=r1;R2=r2;}

void print();

void print() const;

private:

int R1,R2;

};

void R::print()

{

cout<<R1<<":"<<R2<<endl;

}

void R::print() const

{

cout<<R1<<";"<<R2<<endl;

}

void main()

{

R a(5,4);

a.print();

const R b(20,52);

b.print();

}

参考答案

5:4

20;52

10.

若有以下程序:

#include <iostream>

using namespace std ;

class Point

{

int x, y;

public :

Point () { x = 0; y = 0; }

void SetPoint ( int x1, int y1) { x = x1; y = y1; }

void DisPoint () { cout << "x=" << x << "," << "y=" << y << endl ; }

};

int main()

{

Point * p = new Point ;

p-> SetPoint (5, 12);

p-> DisPoint ();

delete p;

return 0;

}

上面程序的输出结果为:

参考答案

x=5,y=12

1.

说明变量时有哪些存储类型?其含义是什么?

参考答案

答: C++语言支持四种存储类型: auto, register, static 和extern。(1) auto 称为自动型也称为堆栈型,用auto 存储类型说明的变量都是局部于某个程序范围内的,只能在某个程序范围内使用,通常在函数体内或函数中的复合语句里。(2) register 称为寄存器型,使用register 关键词说明的变量主要目的是想将所说明的变量放入CPU 的寄存器存储空间中,这样可以加快程序的运行速度。(3) static 称为静态存储类型, 在C++ 语言中, 既可以在函数体内, 也可在函数体外说明static存储类型的变量。在函数体内说明的static 存储类型的变量也是一种局部变量,与auto 最 大不同点是: static 存储类型的变量在内存中是以固定地址存放的,而不是以堆栈方式存放的;只要整个程序还在继续运行静态变量就不会随着说明它的程序段的结束而消失, 它下次再调用该函数,该存储类型的变量不再重新说明,而且还保留上次调用存入的数值。(4) extern 称为外部参照引用型,使用extern 说明的变量是想引用在其它文件中函数体外部说明的变量。当变量在一个文件中的函数体外说明, 所有其他文件中的函数或程序段都可引用这个变量。这种变量的作用域是所有的函数和程序段,一般用于在函数之间传递数据。

2.

简述C++ 的发展简况。

参考答案

答: C++语言是从C 语言发展而来的,C 语言是一种编译型的面向过程的程序设计语言,它最早是从英国剑桥大学一个名叫Martin Richards 的学者在60 年代开发的BCPL( 即BasicCombind Programming Language)语言的基础之上发展而来的。BCPL 语言是Martin Richards在开发系统软件时,作为描述性语言而使用的一种程序设计语言。1970 年,美国Bell 实验室的Ken?Thompson 在软件开发工作中,继承和发展了BCPL 语言的许多特点,进一步提出了一种叫“ B 语言”的语言。随后,在美国Bell 实验室实现的更新型的小型机PDP-11 的UNIX 操作系统的研发工作中,于1972 年推出了一种新型的程序语言— C 语言,该语言一经推出就在国际上广泛流行。20 世纪80 年代,由于软件工程的需要,面向对象程序设计方法在软件设计领域引起了普遍的重视,AT&T Bell 实验室的计算机科学家Bjarne Stroustrup 结合流行的C 语言的所有成分,开发出了面向对象的程序设计语言C++。

3.

什么叫面向对象的程序设计语言?什么叫类?什么叫对象?什么叫消息?

参考答案

答:在程序设计语言中,面向对象是指采用抽象、封装、继承、多态等程序设计的方法。因此,具有抽象、封装、继承、多态等特性的编程语言称为面向对象的程序设计语言。类实际上是一种抽象的数据类型,它将完成某特定功能所用到的数据和对数据的操作(即函数) 封装在一起。对象是指具有某些属性和功能的单个个体。消息是对象之间相互请 求或相互协作的途径,是要求某个对象执行其中某个功能操作的规格说明。

4.

什么叫二级指针变量?什么叫多级指针变量?

参考答案

答:对于指向处理数据的指针变量称为一级指针变量, 简称一级指针。而把指向一级指针变量的指针变量称为二级指针变量, 简称二级指针。我们把一个指向指针变量的指针变量,称为多级指针变量。

5.

什么叫递归函数?简述其执行过程。

参考答案

答:递归函数是指一个函数的函数体中直接调用或间接调用了该函数自身的函数。递归函数调用的执行过程分为两个阶段:(1)递推阶段:从原问题出发,按递归公式递推,从未知到已知,最终达到递归终止条件。(2)回归阶段:按递归终止条件求出结果,逆向逐步代入递归公式,回归到原问题求解。

6.

什么叫函数指针?什么叫指针函数?

参考答案

答:函数指针是一个函数执行代码的起始地址。指针函数是指一个函数的返回值为地址量的函数。

7.

什么叫表达式?什么叫表达式语句?

参考答案

答:所谓表达式是指由运算符、运算量和标点符号组成的有效序列, 其目的是用来说明一个计算过程。表达式可以独立形成语句,该语句称为表达式语句。

8.

简述类中使用常对象和常成员函数需要注意的问题。

参考答案

答:使用常对象和常成员函数需要注意以下问题:(1)常对象在说明时必须进行初始化,而且不能被更新。常对象还可以作为类的成员。(2)const 是函数类型的一个组成部分,因此在函数实现部分也要带有const 关键字;(3)在常成员函数里不能更改所属类的数据成员, 也不能调用该类中没有用const 修饰的类的成员函数;(4)常对象只能调用它的常成员函数,而不能调用其他的成员函数;(5)const 关键字可以用于进行函数重载的区分。其重载的原则是:常对象只能调用常成员函数,一般对象调用一般成员函数。

9.

什么叫数组的指针?什么叫指针数组的指针?

参考答案

答:在C++语言中,数组的指针是指数组在内存中的起始地址。指针变量数组和普通的一般变量数组一样,编译系统在处理指针数组说明时, 按照指定的存储类型为它在内存中分配一定的连续存储空间, 这时指针数组名就表示该指针数组的存储首地址,即指针数组的指针。

10.

编写C++ 语言程序,在书写格式上应该遵从哪些基本原则?

参考答案

答:为了使程序结构更加清楚、易于阅读、维护和修改,在书写格式上应该遵从以下基本原则: (1) 一般一行只写一条语句; (2) 一条复杂语句采用多行,如分支语句和循环语句; (3) 遇到嵌套语句应向后缩进, 必要时对程序增加适当的注释行。

11.

简述构造函数和析构函数的特点。

参考答案

答:构造函数是类的成员函数,函数体可写在类定义体内,也可在类定义体外定义;它是一个特殊的函数,其函数名与类名相同,该函数不指定类型说明,它有隐含的返回值,该值由系统内部使用; 该函数可以没有参数, 也可以有一个或多个参数, 即构造函数可以重载,可以定义具有不同数据类型或不同参数个数的构造函数; 另外,程序中不能直接调用构造函数,在创建对象时系统将自动调用构造函数。析构函数也是类中的成员函数, 其定义的函数体可写在类定义体内, 也可在类定义体外;它也是一个特殊的函数,它的名字与类名相同,但在其前面要加上“ ~”字符,用来区别于构造函数; 析构函数也不指定数据类型, 并且也没有形式参数; 但一个类中只可以定义一个析构函数;析构函数还可以被调用,也可以被系统自动调用。

12.

什么叫常量化变量?其作用是什么?

参考答案

所谓常量化变量是指将一个变量说明为一个常量。作用:当一个变量被说明为常量时,那么该变量在程序执行过程中其值是不能改变的。也就是说, 不能再向常量化的变量再赋值。因此,常量化变量在说明时就必须赋给一个数值。常量化的变量基本上和常量一样。

13.

什么叫void 型指针?其作用是什么?

参考答案

void 型的指针变量是一种不确定数据类型的指针变量, 它可以通过强制类型转换让该变量指向任何数据类型的变量或数组。

14.

简述深拷贝和浅拷贝。

参考答案

答:如果一个类的数据成员需要使用动态分配的堆资源,并且这个类的对象之间发生了数据成员拥有的堆资源复制过程的时候, 这个过程就可以叫做深拷贝, 反之, 对象存在数据成员拥有堆资源但复制过程并未实现数据成员拥有堆资源的复制情况视为浅拷贝。

15.

在类定义中,说明成员的访问权限的public private protected 三个关键字的作用是什么?请分别简述之。

参考答案

答:在类定义体里,使用了private、protected、public 三个关键字是用来说明数据成员和函数成员的访问权限, private 说明私有成员,该类成员只能被自己的成员函数或友元访问;protected 说明保护型的成员, 可以被自己的成员函数或友元访问, 也可以被派生类的函数成员访问; public 说明公有成员,该类成员都可以通过对象被访问的。

16.

假设类模板Employee static 数据成员count ,如从类模板实例化三个模板类。那么有多少个static 数据成员?各有什么限制?

参考答案

三个。从类模板Employee 实例化的三个模板类有自己的类模板static 数据成员,该模板类的所有对象共享一个Static 数据成员。和非模板类的static 数据成员一样,模板类的static 数据成员也应在文件范围内初始化。每个模板类有自己的类摸板的static数据成员副本。

17.

C++ 语言编写的程序代码有那些格式特点?

参考答案

答: C++语言编写的源代码程序的格式具有以下特点: (1) C++语言的关键字是小写字符构成的,习惯上也使用小写字母书写程序; (2) 大多数语句结尾必须用";" 作为终止符, 否则C++ 不认为该语句的结束; (3) 每个程序必须有一个且只能有一个主函数,其名称为main() 的函数; (4) 每个函数的函数体(包括主函数和每个子函数) 必须用一对花括号"{" 和"}" 括起来; (5) 一个较完整的程序文件大致含有: 包括文件程序段(一组#include<*.h> 语句)、函数说明 部分、全局变量说明、主函数和若干个子函数组成。在主函数和子函数中又包括局部变量定 义、库函数调用、流程控制语句、用户函数的调用语句等; (6) 注释部分包含在"/*" 和"*/" 之间或"//" 之后, 在编译时它将被C++ 编译器忽略; (7) 像其它一些语言一样, C++的变量在使用之前必须先说明其数据类型, 未经说明的变量 不能使用。说明变量类型应在可执行语句前面, 如上例main() 函数中的第一条语句就是变量 说明语句, 它必须放在所用的执行语句前面。 (8) 在C++语言中, 大小写字母是有区别的, 相同字母的大小写代表不同的变量。

18.

试比较类的三种继承方式public protected private 之间的差别。

参考答案

答:不同的继承方式, 导致不同访问属性的基类成员在派生类中的访问属性也有所不同:公有继承, 使得基类public( 公有)和protected(保护)成员的访问属性在派生类中不变,而基类private( 私有)成员不可访问。私有继承,使得基类public( 公有)和protected(保护)成员都以private( 私有)成员身份出现在派生类中,而基类private( 私有)成员不可访问。保护继承中,基类public( 公有) 和protected(保护)成员都以protected(保护)成员身份出现在派生类中,而基类private( 私有)成员不可访问。

19.

说明怎样提供特定类型的类重定义该类型的类模板。

参考答案

使用语句“ <类模板名>〈<类型名称1>,< 类型名称2>,...<类型名称n> 〉”,编译系 统会自动地根据需要生成相应的类定义。

20.

简述派生类的构造函数和析构函数的执行次序。

参考答案

答:在派生与继承的层次结构中, 当说明一个派生类的对象时, 系统先执行各个基类的构造函数, 先对基类成员进行初始化, 然后再执行派生类的构造函数; 若某一个基类也是派生类, 则这种执行基类的构造函数的过程需要递归进行下去。在继承链中, 构造函数的执行原则是:先执行基类的构造函数,再执行派生类的构造函数。当一个派生类的对象使用完毕撤消时, 析构函数的执行顺序正好与构造函数的执行顺序相反。即:先执行派生类的析构函数,再执行基类的析构函数。

1.

函数search的原型为:char *search(char *str1,char *str2);,其功能是在字符串str1中查找字符串str2第一次出现的位置。测试用主函数如下所示,请编制search函数,并判断整个程序实现的功能。
#include <iostream.h>
#include <string.h>
void main()

 char *search(char *str1,char *str2);
 char *ptr;
 char s1[100],s2[100];
 cout<<"Input the s1 and s2:"<<endl;
 cin>>s1>>s2;
 ptr=search(s1,s2);
 if(ptr!=NULL)
  cout<<"
子串第一次出现的位置是:s1["<<ptr-s1<<"]"<<endl;
 else
  cout<<s2<<"
没有出现在"<<s1<<"中。"<<endl;
}

参考答案

char *search(char *str1,char *str2)

 int len=strlen(str2);
 for(;strncmp(str1,str2,len)!=0&&*(str1+len-1)!='\0';str1++)
  ;
 return(*(str1+len-1)!='\0'?str1:NULL);
}

2.

下列shape 类是一个表示形状的抽象类, area( ) 为求图形面积的函数, total( )则是一个通用的用以求不同形状的图形面积总和的函数。请从shape 类派生三角形类(triangle) 、矩形类( rectangle ),并给出具体的求面积函数。

参考答案

class shape{

public:

virtual float area( )=0;

};

float total(shape *s[ ],int n)

{

float sum=0.0;

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

sum+=s[i]->area( );

return sum;

}

class Triangle:public Shape

{

public:

Triangle(double h,double w){H=h;W=w;}

double Area() const{return H*W*0.5;}

private:

double H,W;

};

class Rectangle:public Shape

{

public:

Rectangle(double h,double w){H=h;W=w;}

double Area()const{return H*W;}

private:

double H,W;

};

3.

完成如下函数,对有n 个元素的数组a,使数组元素按逆序排列。

参考答案

void inverse(int *a, int n)

{

int i,*p;

p=new int[n];

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

p[i]=a[i];

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

a[i]=p[n-i-1];

delete []p;

}

4.

个小球从100 米高处落下,每次落地后反弹回原高度的一半,再落下。编程求它在第10 次落地时共经过多少米?第10 次反弹多高?

参考答案

#include <iostream>

#include <iomanip>

using namespace std;

int main()

{

float s=100.0,h=s/2;

for(int i=2; i<=10 ; i++)

{

s+=h*2;

h= h/2 ;

}

cout<<" 第10 次落地时,共经过"<<s<<" 米;反弹高度是"<<h<<" 米"<<endl;

return 0;

}

5.

根据下面类中Reverse 函数成员的原型和注释写出它的类外定义。

class AA {

int* a;

int n;

int MS;

public:

void InitAA(int aa[], int nn, int ms) {

if(nn>ms) {cout<<"Error!"<<endl; exit(1);}

MS=ms;

n=nn;

a=new int[MS];

for(int i=0; i<MS; i++) a[i]=aa[i];

}

AA* Reverse(); // 对于调用该函数的对象,将其a 数组中前n

// 元素值按相反的次序排列,返回指向该对象的指针。

};

参考答案

AA* AA::Reverse()

{

75

int i,x;

for(i=0; i<n/2; i++) {

x=a[i]; a[i]=a[n-1-i]; a[n-1-i]=x;

}

return this;

6.

已定义一个Shape 抽象类,在此基础上派生出矩形Rectangle 和圆形Circle 类,二者都有GetPerim()函数计算对象的周长,并编写测试main()函数。

class Shape

{public:

Shape(){}

~Shape(){}

virtual float GetPerim()=0;

}

参考答案

class Rectangle:public Shape

{public:

Rectangle(float i,float j):L(i),W(j){}

~Rectangle(){}

float GetPerim(){return 2*(L+W);}

private:

float L,W;

};

class Circle:public Shape

{public:

Circle(float r):R(r){}

float GetPerim(){return 3.14*2*R;}

private:

float R;

};

void main()

{Shape * sp;

sp=new Circle(10);

cout<<sp->GetPerim ()<<endl;

sp=new Rectangle(6,4);

cout<<sp->GetPerim()<<endl;

}

7.

定义一个复数类Complex, 二个数据成员为double r, i private 属性。定义带二个参数的构造函数和一个Show( ) 函数用以输出r, i 的值, 另外作为成员函数重载的运算苻”+”的功能是将此类二个对象的数据成员r i 对应相加。这些成员函数的属性均为public.请用C++编写此程序, 并编写测试程序进行测试。

参考答案

#include <iostream >

using namespace std;

class Complex

{

private:

double r, i;

public:

Complex(double a, double b): r(a), i(b) {}

void Show() { cout << r << " " << i << endl; }

Complex operator +(Complex obj)

{ return Complex(r + obj.r, i + obj.i); }

};

int main()

{

Complex c1(3.5, 4.5), c2(2.5, 5.5), c3(0.0, 0.0);

c3 = c1 + c2;

c3.Show();

return 0;

}

8.

下面给出了矩阵类Matrix 定义。为了求两个矩阵对象的乘积, 需要定义一个Matrix的友元函数Multiply() 。请按照友元函数Multiply()的声明编写出该函数的定义。

class Matrix {

public:

Matrix(int row,int col); // 构造一个具有row col 列的矩阵

~Matrix() {delete []mem;} // 析构函数

friend bool Multiply(Matrix &m1, Matrix &m2, Matrix &m3);

// 定义Multiply() 为友元函数,该函数把m1×m2的值赋给m3

// 其他成员函数从略

private:

int *mem; // 动态申请矩阵空间

const int rows,cols; // 矩阵的行数和列数

};

Matrix::Matrix(int row,int col):rows(row),cols(col)

{

mem = new int[row*col];

}

bool Multiply(Matrix &m1, Matrix &m2, Matrix &m3)

{

// 确定矩阵是否能够进行相乘

if(m1.rows != m3.rows ||m2.cols != m3.cols || m1.cols != m2.rows) return false;

// 定义sum变量,用于计算乘积矩阵m3中每个元素的值

int sum;

// 请在下面编写剩余部分

}

参考答案

for(int i=0; i<m1.rows; i++)

for(int j=0; j<m2.cols; j++){

sum=0;

for(int k=0; k<m1.cols; k++)

sum+=m1.mem[i*m1.cols+k]*m2.mem[k*m2.cols+j];

m3.mem[i*m3.cols+j] = sum;

}

return true;

9.

编写一个函数模板,用于求数组中各元素之和,并编写测试程序进行测试。

参考答案

函数模板声明如下:

template <class Type>

Type Sum(Type tArray[], int iSize)

#include <iostream>

using namespace std;

template <class Type>

Type Sum(Type tArray[], int iSize)

{

Type tSum = 0;

for (int i = 0; i < iSize; i++)

{

tSum = tSum + tArray[i];

}

return tSum;

}

int main(void)

{

int a[] = {1, 2, 3};

double b[] = {1.5, 2.8, 8.9, 8};

cout << Sum(a, 3) << endl;

cout << Sum(b, 4) << endl;

return 0;

}

10.

已知类定义如下,其中Shape 为基类, Circle Rectangle 分别Shape 的直接派生类, Square Rectangle 的直接派生类和Shape 的间接派生类。请模仿Rectangle 类,写出Circle 类的所有成员函数。

/****************** 文件shape.h*************************/

const float PI=3.14159f; // 定义圆周率常量

class Shape // 几何图形抽象类

{

public:

virtual float GetPerimeter()=0; // 纯虚函数,计算周长

virtual float GetAre()=0; // 纯虚函数,计算面积

};

class Rectangle: public Shape // 矩形类

{

public:

Rectangle (float len,float wid):length(len),width(wid){}

~Rectangle (){}

float GetPerimeter() {return 2*(length+width);} // 计算矩形周长

float GetAre() {return length*width;} // 计算矩形面积

private:

float length, width; // 矩形的长和宽

};

class Circle: public Shape // 圆类

{

public: // 在下面编写每个成员函数

private:

float rad; // 圆的半径

};

class Square: public Rectangle // 正方形类

{

public:

Square(float len): Rectangle(len,len){}

~Square(){}

};

参考答案

Circle(float rad):rad(rad){}

~Circle(){}

float GetPerimeter() {return 2*PI*rad;} // 计算圆形周长

float GetAre() {return PI*rad *rad;} // 计算圆形面积

11.

编写类String 的构造函数、析构函数和赋值函数和测试程序。

已知类String 的原型为:

#include <iostream.h>

#include <string.h>

class String

{public:

String(const char *str=NULL); // 普通构造函数

String(const String &other); // 拷贝构造函数

~String(); // 析构函数

String & operator=(const String &other); // 赋值函数

void show()

{cout<<m_data<<endl;

}

private:

char *m_data; // 用于保存字符串

};

参考答案

String::~String()

{delete []m_data;// 由于m_data是内部数据类型,也可以写成delete m_data;

}

String::String(const char *str)

{if(str==NULL)

{m_data=new char [1];// 若能加NULL判断则更好

*m_data=\0;

}

else

{int length=strlen(str);

m_data=newchar [length+1 ]; // 若能加NULL判断则更好

strcpy(m_data, str);

}

}

String::String(const String &other)

{int length=strlen(other.m_data);

m_data=newchar [length+1 ];// 若能加NULL判断则更好

strcpy(m_data, other.m_data);

}

String & String::operator=(const String &other)

{if(this==&other)

return *this;

delete []m_data;

int length=strlen(other.m_data);

m_data=newchar [length+1 ];// 若能加NULL判断则更好

strcpy(m_data, other.m_data);

return *this;

}

void main()

{String str1("aa"),str2;

str1.show();

str2=str1;

str2.show();

String str3(str2);

str3.show();

}

12.

输入一个正整数,编程求该数的阶乘。

参考答案

#include <iostream>

using namespace std;

int main()

{

int i,n;

long int fact=1;

cout<<" 请输入一个正整数:";

cin>>n;

for(i=2;i<=n;i++) fact *=i;

cout<<n<<"!="<<fact<<endl;

return 0;

}

13.

编程序实现功能:将键盘输入流上接收的字符串中的连续数字字符提取出来。例如输入的字符串是"sdjk2343djkdjjkls8990",则提取出的数据依次是:23438990

参考答案

#include <iostream.h>
int Isdigit(char c);
void main()

 char p[80],tmp[80],*s=p,flag=0;
 int num=0;
 cin>>s;
 while(*s)
 { if(Isdigit(*s))
  { 
   tmp[num]=*s;
   num++;
   flag=1;
  }
  if(flag&&Isdigit(*(s+1))==0) 
  { 
   tmp[num]='\0';
   cout<<tmp<<endl;
   flag=0;
   num=0;
  }
  s++;
 }
}
int Isdigit(char c)

 if(c>='0'&&c<='9')
  return 1;
 return 0;
}

14.

Fibonacci 数列的头两个数分别是0 1,从第3 个数开始, 每个数等于前两个数的和。求Fibonacci 数列的前20 个数。要求每行输出5 个数。

参考答案

#include <stdio.hstream>

#include <iomanip>

using namespace std;

int main( )

{

int f, f1, f2, i;

cout<<"Fibonacci 数列: \n";

f1=0; f2=1;

cout<<setw(6)<<f1<<setw(6)<<f2;

for(i=3; i<=20; i++)

{

f= f1+f2;

cout<< f;

f1=f2; f2= f;

}

cout<<endl;

return 0;

}

15.

设计一个类DateInfo ,要求其满足下述要求:

1)要求有一个无参的构造函数,其初始的年、月、日分别为: 20106 8

2)要求有一个带参数的构造函数,其参数分别对应年、月、日。

3)要求用一个成员函数实现日期的设置。

4)要求用一个成员函数实现日期的获取。

5)要求用一个成员函数实现输出日期。

参考答案

#include <iostream>

using namespace std;

class DateInfo

{

private:

int year, month, day;

public:

DateInfo(): year(2010), month(6), day(8){ }

DateInfo(int y, int m, int d): year(y), month(m), day(d){ }

void Set(int y, int m, int d)

{

year = y;

month = m;

day = d;

}

void Show() { cout << year << " 年" << month << " 月" << day << " 日" << endl; }

};

int main()

{

DateInfo d1, d2(1988, 8, 18);

d1.Show();

d2.Show();

d2.Set(1999, 9, 19);

d2.Show();

return 0;

}

16.

编写class cA 的派生类class cAB ,增加成员函数,用于求圆的周长

参考答案

class cA

{

int r;

public:

cA(int x){ r=x; }

double area( ) { return r*r*3.14; }

int get_r( ) { return r; }

};

class cAB:public Ca

{cAB(int x):cA(x){ }

double girth( ) { return 2*get_r( )*3.14; }};

17.

定义一个处理日期的类TDate,它有3 个私有数据成员: Month,Day,Year 和若干个公有成员函数, 并实现如下要求:构造函数重载;成员函数设置缺省参数; 定义一个友元函数来打印日期;可使用不同的构造函数来创建不同的对象。

参考答案

#include <stdio.h>

class TDate

{

public:

TDate(); //构造函数

TDate(int nMoth,int nDay,int nYear); // 构造函数重载

void SetDay(int nDay=1); //三个设置某个成员变量的成员函数,都带有默认值

void SetMonth(int nMonth=1);

void SetYear(int nYear=2001);

void SetDate(int nMoth,int nDay,int nYear);// 一个非静态成员函数

friend void PrintDate(TDate cTdate); //友员函数

private:

int m_nMonth;

int m_nDay;

int m_nYear;

};

TDate::TDate()

{

m_nDay=1;

m_nMonth=1;

m_nYear=2000;

}

TDate::TDate(int nMoth,int nDay,int nYear)

{

m_nYear=nYear;

m_nDay=nDay;

m_nMonth=nMoth;

}

void TDate::SetDate(int nMoth,int nDay,int nYear)

{

m_nYear=nYear;

m_nDay=nDay;

m_nMonth=nMoth;

}

void TDate::SetDay(int nDay/*=1*/)

{

m_nDay=nDay;

}

void TDate::SetMonth(int nMonth/*=1*/)

{

m_nMonth=nMonth;

}

void TDate::SetYear(int nYear/*=2000*/)

{

m_nYear=nYear;

}

void PrintDate(TDate cTDate)

{

printf("Date is:%d-%d-%d",cTDate.m_nYear,cTDate.m_nMonth,cTDate.m_nDay);

}

void main()

{

TDate cTdate;

cTdate.SetDate(6,1,2012); // 使用成员函数

cTdate.SetDay(10);

TDate CMyDate(6,1,2012);// 重载的构造函数生成对象实例

PrintDate(CMyDate); //使用友员函数

}

18.

下面的函数统计子字符串substr 在字符串str 中出现的次数,如果substr str 中不出现,则返回值0。请完成该函数。

参考答案

int str_count(char *substr, char *str)

{

int count=0;

char *pChar;

if(substr==NULL||str==NULL) return count;

while(*str!='\0'){

pChar=substr;

while(*pChar==*str){

pChar++;

if(*pChar=='\0'){

count++;break;

}

else str++;

}//Match while(*pCh...) statement

str++;

}//Match while(*str...) statement

return count;

}

19.

编程序实现功能:对于一个输入的字符串,将其中的诸如“a-h”“A-F”“2-5”等缩写形式在原串中展开成“abcdefgh”“ABCDEF”“2345”;对于非法的缩写形式如“a-9”“5-f”等形式则不予处理(原样输出)。

参考答案

#include <iostream.h>
void main()

 int check(char s[],int c);
 char s[100],ch;
 int i,j,last,gap;
 cin>>s;
 for(i=0;s[i]!='\0';i++)
 { for(last=0;s[last]!='\0';last++)
   ;
  if(s[i]=='-')
  { if(check(s,i))
   { gap=s[i+1]-s[i-1]-2;
    while(last>i)
    { s[last+gap]=s[last];
     last--;
    }
    ch=s[i-1]+1;
    for(j=0;j<=gap;j++)
     s[i+j]=ch+j;
   }
  }
 }
 cout<<s<<endl;
}
int check(char s[],int c)

 if(s[c-1]>='0'&&s[c-1]<='9'&&s[c+1]>='0'&&s[c+1]<='9')
  return 1;
 else if(s[c-1]>='a'&&s[c-1]<='z'&&s[c+1]>='a'&&s[c+1]<='z')
  return 1;
 else if(s[c-1]>='A'&&s[c-1]<='Z'&&s[c+1]>='A'&&s[c+1]<='Z')
  return 1;
 else
  return 0;
}

20.

定义一个抽象类CShape,它有一个纯虚函数GetLength() ;派生出四边型类CSquare和圆类CCircle ,在派生类中重载函数GetLength() ,用于求图形的周长,编写测试程序进行测试。

参考答案

#include <iostream>

using namespace std;

class CShape

{

public:

virtual double GetLength() const = 0;

};

class CSquare:public CShape

{

public:

CSquare(double dWidth, double dHeight)

{

m_dWidth = dWidth;

m_dHeight = dHeight;

}

double GetLength() const

{

return 2 * (m_dWidth + m_dHeight);

}

private:

double m_dWidth, m_dHeight;

};

class CCircle:public CShape

{

public:

CCircle(double dRadius)

{

m_dRadius = dRadius;

}

double GetLength() const

{

return 3.1415926 * m_dRadius * m_dRadius;

}

private:

double m_dRadius;

};

int main(void)

{

CSquare oSquare(2, 3);

cout << oSquare.GetLength() << endl;

CCircle oCircle(10);

cout << oCircle.GetLength() << endl;

return 0;

}

BY:Vip_Hc 无偿分享 E-mail:xysds@protonmail.com

分享保留出处.禁止用于任何盈利行为,崇拜大神吧。啊哈哈哈哈哈哈哈哈哈哈哈。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵银吉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值