C++期末总复习

1.关于变量的存储类型,下列说法错误的是(C )。

A、函数形参默认为是自动变量

B、全局变量默认为是静态变量

C、局部变量没有缺省值

D、静态变量具有缺省值0

2.类中不能给成员变量进行初始化

3.二维数组的列元素不能为空

4.关于类的构造函数,下列说法不正确的是( D )。

A、每个类都有构造函数

B、编写程序时,可以不为类定义构造函数

C、为了初始化类的数据成员,通常需要定义构造函数

D、每个类均有且只有一个缺省的构造函数

5.关于类的静态数据成员,下列叙述正确的是( D )。

A、静态数据成员不可以在类的构造函数中赋值

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

C、静态数据成员不受类的访问权的限制

D、静态数据成员可以通过类名调用

6.关于常对象和常成员,下列叙述错误的是(C )。

A、常成员函数既能访问常成员数据,也能访问非常成员数据

B、非常成员函数既能访问非常成员数据,也能访问常成员数据

C、常对象既能访问常成员函数,也能访问非常成员函数

D、非常对象既能访问非常成员函数,也能访问常成员函数

7.下列关于虚函数的描述中正确的是(D )。

A、可以把静态的成员函数说明为虚函数

B、可以把非成员函数说明为虚函数

C、可以把构造函数和析构函数说明为虚函数

D、基类中的虚函数继承到派生类中,即使不用virtual说明仍为虚函数

8.以下关于类的友元函数的描述中,不正确的是(C )。

A、类的友元函数要用关键字“friend”说明

B、友元函数在类体中说明时,不受类中访问权限的限制

C、友元函数的作用域与类中成员函数的作用域相同

D、通常在类体之外定义友元函数的函数体

9.下面关于运算符重载的描述错误的是(C )。

A、运算符重载不能改变操作数的个数、运算符的优先级和结合性

B、不是所有的运算符都可以重载

C、运算符重载函数的调用必须使用关键字operator

D、在C++语言中不可通过运算符重载创造出新的运算符

10.下列关于单目运算符重载函数的参数描述中,错误的是(D )。

A、运算符重载函数的参数个数可能为0个

B、运算符重载函数的参数个数可能为1个

C、运算符重载函数的参数个数可能为2个

D、运算符重载函数的参数个数是可以变化的

11.若用友元函数重载运算符“/”,则对象表达式“y/x”还可以表示为( D)。

A、x.operator/(y)

B、operator/(x,y)

C、y.operator/(x)

D、operator/(y,x)

12.设有下列说明语句: int m=10; const int n=10; const double k=10;; 则下列数组的定义中没有语法错误的是( A)。

A、float a[n+5];

B、int b[m];

C、double c[k];

D、float d[ ]

13.下列能用作C++自定义标识符的是(D )。

A、char

B、5d

C、-ab

D、_5D

14.自定义标识符是指在编程中,用户根据需要为变量,函数等对象起的名称,作为名称的标识符必须由字母,数字,下划线组成,且不能以数字开头。

15.数组的大小必须是整数常量表达式,也就是说,在编译时就必须知道数组的大小。例如:

设有下列说明语句: int m=10; const int n=10; const double k=10;; 则下列数组的定义中没有语法错误的是( A)。

A、float a[n+5];

B、int b[m];

C、double c[k];

D、float d[ ]

16.本关任务:下列程序声明了一个表示连续正整数序列的类MagicNumber,用于求序列中的对称数。MagicNumber的成员函数Invert的功能是计算一个数的反序数,成员函数Symmetry的功能是查找一个序列中的对称数。将一个数的每位数倒过来所得到的新数叫原数的反序数,如果一个数等于它的反序数,则称该数为对称数。

用while循环来实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include<iostream>
#include<cmath>
using namespace std;

class MagicNumber{
public:
MagicNumber(int x1,int x2):min(x1),max(x2),count(0){ }
int GetDigits(int x); // 计算数字x的位数
void ResetCount() { count=0; }
int GetCount()const { return count; }
int GetSet(int index){ return set[index]; }
int Invert(int x); // 计算反序数
void Symmetry(); // 寻找对称数
void Print()
{
int i;
cout<<min<<"和"<<max<<"之间的对称数共"<<count<<"个:"<<endl;
for(i=0;i<count;i++)
cout<<set[i]<<" ";
cout<<endl;
}
private:
int digit; // Magic数的位数
int min,max; // 待计算的数值范围
int count; // Magic数的数量
int set[40]; // Magic数的集合
};
void MagicNumber::Symmetry()
{
int i;
for(i=min;i<=max;i++)
if(i==Invert(i))
set[count++]=i;
}
int MagicNumber::Invert(int x)
{
int n;
//********begin********
//n=x%10*100+x/10%10*10+x/100;
n=0;
while(x){
n=n*10+x%10;
x/=10;
}
return n;
//********end********
}
int MagicNumber::GetDigits(int x)
{
int i;
for(i=0;x>0;i++)
x/=10;
return i;
}

int main()
{
int d1,d2;
d1=100;
d2=200;
MagicNumber obj(d1,d2);
obj.Symmetry();
obj.Print();
system("pause");
return 0;
}

17.本关任务:下列程序声明了一个字符串类STRING,用于实现字符串的交叉插入,即把2个源字符串交叉地插入到目标字符串中。

测试输入:

预期输出:

源字符串1:abcde

源字符串2:ABCDEFGH

目标字符串:aAbBcCdDeEFGH

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include<iostream>
#include<cstring>
using namespace std;

class STRING{
public:
// 用参数p1初始化s1,参数p2初始化s2,并分配s的动态空间
STRING(char* p1,char* p2);
void insert(); // 按题意要求将s1、s2交叉插入s
void print(); // 按要求输出结果
~STRING(); // 析构函数,释放动态空间
private:
char *s1; // 源字符串1
char *s2; // 源字符串2
char *s; // 目标字符串
};
STRING::STRING(char* p1,char* p2)
{
int i=strlen(p1),j=strlen(p2);
s1=new char[i+1];
strcpy(s1,p1);
s2=new char[j+1];
strcpy(s2,p2);
s=new char[i+j+1];
}
void STRING::insert()
{
char *p1,*p2,*p;
//********begin********
p1=s1,p2=s2,p=s;
while(*p1||*p2){
if(*p1){
*p=*p1;
p++;
p1++;
}
if(*p2){
*p=*p2;
p++;
p2++;
}
}
//********end********
}
void STRING::print()
{
cout<<"源字符串1:"<<s1<<endl;
cout<<"源字符串2:"<<s2<<endl;
cout<<"目标字符串:"<<s<<endl;
}
STRING::~STRING()
{
delete []s1;
delete []s2;
delete []s;
}
int main(void)
{
STRING t("abcde","ABCDEFGH");
t.insert();
t.print();
system("pause");
return 0;
}

18.下面关于成员函数重载运算符和友元函数重载运算符叙述正确的是(A )。

A、成员函数和友元函数可重载的运算符是不相同的

B、成员函数和友元函数重载运算符时都需要用到this指针

C、成员函数和友元函数重载运算符时都需要声明为公有的

D、成员函数和友元函数重载运算符时的参数可能是相同的

19.下列关于友元函数的描述错误的是(A )。

A、友元函数具有类作用域,在类中随处可见

B、友元函数是类的外部函数,但能访问类的私有成员

C、在类体中说明友元函数时,不受访问权限的限制

D、在类体外定义友元函数时,不能通过作用域运算符指明其所属的类

20.下列关于纯虚函数的叙述中不正确的是( B)。

A、纯虚函数的说明以“=0;”结束,没有函数体

B、若不定义纯虚函数的函数体,编译时会产生连接错误

C、含纯虚函数的类是抽象类,不能定义其对象,但可以定义其指针或引用D、在派生类中定义基类纯虚函数的实现后,方可产生派生类的对象

21.关于派生冲突及解决方法,下列说法错误的是( C)。

A、来自不同类的同名成员,可用类名和作用域运算符进行区分

B、解决派生类中出现基类成员多个拷贝的方法是把基类声明为虚基类

C、用关键字virtual声明的虚函数不会出现同名冲突

D、派生成员和新增成员同名时,派生类中默认引用的是新增成员

22.关于类的静态成员,下列叙述错误的是(D )。

A、可以通过类名和作用域运用符使用类的静态成员

B、可以通过对象名和成员运用符使用类的静态成员

C、类的静态成员函数不能直接使用类的非静态成员

D、在声明对象前系统不为类的任何数据成员分配存储空间