复习题 考试题型(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 类有一成员函数为输出函数,用于输出所有数据成员; ⑥主函数用自己的信息定义一个学生对象,并输出该信息。