Uploaded by Jiaxi Don

C++Review question

advertisement
复习题
考试题型(A 卷):选择(单选)、填空、简答、程序分析、程序编写
1. C++代码源文件的扩展名应为 (
)
A. c
B. cpp
C.obj
D.exe
2. 设同时有函数声明:char fun(int a); float fun(char *p); int fun(int &b);则以下函数调用语
句正确的是 (
)
A. fun(5)
B. int b; fun(&b);
C. char *p; fun(p);
D. int a; fun(a)
3. 标准输入流对象 cin 无法读取(
)
A. 数值
B. 字符串
C. 空白字符
D. 字符
4. 以下不属于 C++关键字的是(
)
A. mutable
B. class
C. Friend
D. virtual
5. 通过(
)方法可以在现有类基础上得到新的类。
A. 继承
B. 引用
C. 包含
D.封装
6. 成员函数亦可声明为静态的,但是它不能直接访问类的(
)数据成员
A. 私有
B. 静态
C. 常量
D. 非静态
7. 若类 B 的定义中私有数据成员 i 为常数据成员,则(
)
A. 数据成员 i 不能被一般的成员函数所访问
B. 数据成员 i 的初始化可以在构造函数的函数体中实现
C. 数据成员 i 可以被常成员函数访问和赋值
D. 以上均不对
8. 在编译时,将所调用的函数代码嵌入到主调函数中,这种嵌入到主调函数中的函数不
能称为(
)
A. 内置函数
B. 内联函数
C. 内嵌函数
D. 嵌套函数
9. 存储以下数据,占用存储字节最多的是(
)
A. NULL
B. '0'
C. "0"
D. 0.0
10. 面向对象的程序是(
)两者的组合
A. 算法和数据结构
B. 对象和函数
C. 函数和算法
D. 对象和消息
11. 如果调用带有默认参数的函数时缺少一个参数,则( )参数就作为这一参数
A. 第 1 个
B. 中间 1 个
C. 最后一个
D. 系统随机选择
12. 假定 A 为一个类,则执行 A a, b[2], *p=&a, c(*p);语句后,程序将要结束时,共调
用该类析构函数的次数应为(
)
A. 2
B. 3
C. 4
D. 5
13. 已知 f1 和 f2 是同一类的两个成员函数,但 f1 不能直接调用 f2,这说明(
)
A. f1 和 f2 都是静态函数
B. f1 是静态函数,f2 不是静态函数
C. f1 不是静态函数,f2 是静态函数
D. f1 和 f2 都不是静态函数
14. 下列关于函数模板与类模板的描述中,不正确的是(
)
A. 函数模板的实例化是由编译程序在处理函数调用时自动完成
B. 类模板的实例化必须由程序员在程序中显式的指定
C. 函数模板与类模板均可以显式调用
D. 定义函数模板时可以使用多个类型参数,而类模板不可以
15. 对于语句 cout>>a;,下列描述中不正确的是(
)
A. “cout”是一个输出流对象
B. 该语句错误使用了运算符
C. “>>”称作插入运算符
D. 该语句需要头文件 iostream
16. 下面运算符中,不能被重载的运算符是(
)
A. <=
B. -
C. ?:
D. []
17. 以下不属于面向对象的程序设计语言的是(
)
A. C#
B. C++
C. Java
D. C
18. 下列关于 C++中运算符重载的描述中,错误的是(
)
A. 运算符重载是对已有的运算符赋予多重含义
B. 重载的运算符,其运算对象可以是自定义的数据类型
C. 编译系统对重载运算符的选择,遵循函数模板的选择原则
D. 运算符的重载实质上是函数的重载
19. 假定 p 所指对象的值为 5,p+1 所指对象的值为 8,则执行“(*p)++;”语句后,p
所指对象的值为( )
A. 6
B. 9
C. 5
D. 8
20. 运算符重载时不需要保持的性质是( )
A. 操作数个数
B. 操作数类型
C. 优先级
D. 结合性
21. 已有定义:char *str="abcd";则下面语句正确的是(
)
A. str[0]="a";
B. str[1]='b';
C. char c=str[0]; D. *str="xyzw";
22. 已知:int k=6;则下列语句中能正确表示引用的是(
)
A. int x=k;
B. int &x=k;
C. int &x=6;
D. int &x=&k;
23. 下列虚基类的声明中,正确的是(
)
A. class B:virtual public A
B. class virtual B:public A
C. virtual class B:public A
D. class B:public A virtual
24. 已有定义 virtual int area( )=0;下面关于该函数的解释中正确的是(
)
A. 该函数是纯虚函数
B. 该函数返回值为 0
C. 该函数通常在派生函数中声明
D. 该函数的入口地址为 0
25. 作为类的成员函数重载一个运算符时,如果参数表为空,通常情况下,说明该运算
符有(
)个操作数
A. 0
B. 1
C. 2
D. 3
26. 下面关于 cin.eof()的说明中,不正确的是(
)
A. 结束输入
B. cin 的成员函数
C. 检测流状态是否结束
D. 与 EOF 有关
27. 重载函数在
或
上不同,但函数名称相同。
28. 若要把变量 s 定义为短整型变量 k 的引用,则所使用的定义语为
。
29. 已有定义 const int a=5; 则要定义一个常指针指向该变量 a 的语句是:
30. 常对象中的数据成员必须通过_________函数才可以访问。
31. 对象将其大部分实现细节隐藏起来,这种机制称为
。
32. C++中,专门用于定义重载运算符的关键字是
。
33. 用于存贮当前被调用的成员函数所在对象的起始地址的指针是__________。
34. 如果希望类的成员为该类所有对象所共享,可以使用关键字________来修饰。
35. 在 C++中,由继承而产生的新类,它的对象对同一个消息会作出不同的响应,这种
特性被称为
。
36. 已有类 A 的定义,其中有成员函数 int get_a(){return a;}则定义一个指针指向该函数
的写法为
。
37. 假定类 A 中没有构造函数,则系统默认的构造函数形式是
。
38. 多重继承消除二义性的通用性方法有
和
。
39. class w{ static char a;
char y[2]; int x;
double fun(int a){x=a; return 0;}
};则 sizeof(w)的值为
。
40. 从系统实现角度看,C++中的动态多态性是通过
来实现的。
41. 语句 cout<<x<<endl; 中“<<”称为
运算符。
42. 在 C++中,用户管理文件的 I/O 操作需要头文件 <
> 。
43. 在 C++中,用于动态分配内存的运算符是
。
44. 在类的定义中,通常用
函数为对象分配内存空间,并可对类的数据成
员进行初始化。
45. 在 C++中,继承间接共同基类时只保留一份成员的方法是
。
46. 现有如下定义:int x='B'+2;char y= x>='9'?'C': 'S'; 则 y 是 '
'。
47. 假设类 X 的对象 x 是类 Y 的成员对象,则“Y Obj;”语句执行时,先调用类__________
的构造函数,再调用类__________的构造函数;而在程序结束析构时,先调用类
__________的析构函数,再调用类__________的析构函数。
48. 对象的概念中,有静态和动态两种特征,其中静态特征称为
,可由数
据表示,而动态特征称为行为,可由
表示。
49. 继承关系可以是 public、
和 private。
50. 常数据成员只能通过构造函数的初始化表初始化。
51. 类所占空间为数据成员和成员函数所占空间之和。
52. char *str="abcd";执行 str[0]='s';语句后,字符串变为"sbcd"。
53. 类的析构函数在删除对象时调用,并可以重载。
54. 构造函数不能声明为虚函数,而析构函数可以声明为虚函数。
55. 用来存放对象地址的指针变量,可称为指向对象的指针。
56. 字符串" CDU"的长度是 3,因此占用了 3 个字节的内存空间。
57. 多重继承出现的二义性可以用作用域限定的方法消除。
58. <<运算符可以被重载,且可以提升优先级。
59. 无论何种继承形式,派生类均不能直接访问基类的私有成员。
60. C++中,定义类的关键字是 public。
61. 抽象类定义的目的是用它作为基类去建立派生类。
62. 常对象中的数据成员就是常数据成员。
63. 对象基本特点有耦合性、多态性、继承性和封装性。
64. 字符串" CDU"的长度是 3,因此占用了 3 个字节的内存空间。
65. 构造函数有返回值,而析构函数没有返回值。
66. 类定义的公用数据成员 x,在类外可以直接赋值,如 x=5;
67. 若想输出时,数据靠右,并指定字段宽度为 6,可用控制符 setw(6)。
68. 不出现类名,也可以直接定义对象。
69. 下面程序中有一处错误,请用下划横线标出错误所在行并说明出错原因。
float a(int x,int y)
{float z;z=x+y;
return z;}
int a(float x,float y)
{ int z;z=x-y; return z;}
int main()
{
int i=3;float j=3.5;
cout<<a(i,j);
cout<<a(3,3.5);
return 0;
}
出错原因:
70. 阅读程序,在横线处填上适当字句。
#include<iostream>
#include<string>
using namespace std;
//声明一个类模板,虚拟类型名为 type
class A {
type x,y;
public:A(type a, type b){x=a;y=b;}
type cmp(){return ( x+y );}
};
int main(){
A <int> cp1(6.6,3.6);
A
cp2("12","34");
cout<<cp1.cmp()<<'\t'<<cp2.cmp();
return 0;
}
输出结果为:
71. 请在下划横线处填写程序的输出结果。
class Point{
int x,y;
public:
Point(int x1=5,int y1=6){x=x1;y=y1;}
~Point(){cout<<x<<y<<" is deleted."<<endl; } };
void main()
{
Point a;
Point b(8,8);
}
输出结果为:
72. 阅读程序,在下划横线处填写适当字句。
class A{
char a;
short b;
public:
void out(){ a=20;b=40;
char *p; p = &a;
cout << "a="<<(short)(*p++) <<'\t'<< "b=" <<
}
<< endl;
};
int main()
{
A test;
test.out();
cout<<"the size of test is:"<<
return 0;
}
输出结果为: a=20
b=40
the size of test is:
<<endl;
73. 请在下划横线处填写程序的输出结果。
void main( )
{
int y=9;
for( ;y>0;y--;) if(y%3==0) cout<<y--;
}
输出结果为:
74. 阅读程序,在下划横线处填写适当字句。
class A{
const int a;
static int b;
public:
//构造函数,用变量 x 初始化数据成员 a
int get_a() const {return a;}
int get_a() {return a+b;}
};
//用常数 333 初始化数据成员 b
int main() {
const A test1(111);
A test2(222);
cout<<test1.get_a()<<'\t'<<test2.get_a()<<endl;
return 0;
}
输出结果为:
75. 阅读程序,在下划横线处填写适当字句。
class A {
protected:
int a;
public:
A(){ a = 1;}
};
class B1: public A {
public:
B1(){}
};
class B2: public A {
public:
B2(){}
};
class C:
//C 类由直接基类 B 1 和 B 2 公有派生
{
public:
Derived() {}
void Init(int b) {
;
//b 赋给基类 B1 的 a 成员
}
};
76. 下面程序中有一处错误,请用下横线标出错误所在行并说明出错原因。
class base {
public: int x;
};
class One:public base{};
class Two:public base{};
class OT:public One,public Two{
public: int func();
};
void main() {
OT p;
p.base::x;
}
77. C++语言中,构造一个派生类需要做哪些工作?
78. 假定有一个类,名称为 A,有 1 个字符型的数据成员 c 和 1 个整形数据成员 x。请
写出该类的至少 2 个不同的构造函数形式。
79. 分别用 new 和 malloc()分配一个有 5 个元素的整形数组,名称为 a。
80. 完成一个求圆面积的小程序,要求如下:
①定义一个基类:点类(Dot),包括 x 坐标和 y 坐标(公有或保护),从它派生一个圆
类(Circle),增加私有数据成员 r(半径);
②圆类的函数成员包括构造函数、输入圆心坐标及圆半径的函数(input)、计算并返
回面积的函数(area);
③主函数中生成一个圆类对象 crc,通过构造函数或 input 函数为数据成员赋值,圆
心坐标为(6,6),半径为 5。使用对象 crc 的函数成员 area 计算面积,主函数输出结
果。
81. 编写类的定义,完成如下要求:
①定义一个 People 类,它的数据成员有年龄、姓名和性别;
(字符串使用字符数组形式)
②以 People 类为基类,从中派生出学生类 Student;
③在 Student 类中,新增一个数据成员为高数成绩;
④所有数据成员的输入由 Student 类构造函数实现;
⑤Student 类有一成员函数为输出函数,用于输出所有数据成员;
⑥主函数用自己的信息定义一个学生对象,并输出该信息。
Download