C++期末复习试卷A复习课程

精品文档

计算机科学与技术 题号 一 信息管理与信息系统 二 20 三 20 四 25 五 25 总分 100 分值 得分 10 专业《面向对象程序设计C++》试卷(A卷)(闭卷) 班级 姓名 学号 一、判断题:(10分)(共10小题,每小题1分)

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

2. 私有继承中,基类中所有成员在派生类成员函数中都不可以访问。 3. 动态绑定的多态性必须通过虚函数实现。

4. 友元函数的声明在类体内,它是一种成员函数。

5. 在类CDate中的析构函数可以声明为:void ~CDate(); 6. 在C++中,只能重载已有的运算符。 7. 引用和指针都可作为函数参数。

8. 可以在类的构造函数中对静态成员进行初始化。 9. 可以用delete释放不是用new运算符分配的内存。

10. 内联函数相比普通函数的优点是直接将函数体展开,因此省去函数调用栈的开销。

二、单选题:(20分)(共10小题,每小题2分)

1. 关键字 ____________ 说明对象或变量初始化后不会被修改。 A. static B. public C. const D. inline 2. C++中,用于解决二义性问题的技术是_______。 A. 虚函数 B. 函数重载 C. 静态函数 D. 虚继承

3. 如果调用带有默认参数的函数时缺少一个参数,则______________的默认值就作为这一参数值。 A. 第一个 B. 最后一个 C. 中间一个 D. 以上都不是 4. 要让一个类的所有对象具有共同的数据,要使用__________________。 A. 静态数据成员 B. 私有数据成员 C. 公有数据成员 D. 保护数据成员

5. 已知A是一个自定义的类,请问以下代码调用拷贝构造函数的次数是__________。 A& f(A* pa){ pa = new A(); return *pa; 精品文档

精品文档

}

int main() { A a = f(NULL); return 0; }

A. 0次 B. 1次 C. 2次 D. 3次

6. 假定要对类A的对象a、b和c执行以下操作: c = a+ b;

必须要重载加号运算符函数,以下写在A类体内的声明语句哪个能满足要求_________。 A. operator+ (A& b); B. A operator+ (A& a, A& b); C. friend A operator+ (A& a, A& b); D. friend A & operator+ ( A& b); 7. 如果有int x,*p; float y,*q;则下面操作正确的是_________。 A. p=x B. p=q C. p=&x D. p=&y 8. 模板的主要用途是为了_________。 A. 提高代码的可重用性 B. 提高代码的运行效率 C. 实现多态性

D. 加强类的封装性

9. C++源文件的扩展名是____________。 A. .c B. .dsw C. .dsp D. .cpp

10. 若已定义了A类的构造函数A(int a=0); 以下关于new运算符的用法错误的是________。 A. A* p = new A; B. A* p = new A(1); C. A* p=new A[1] D. A* p = new A (1) [1];

三、填空题:(20分)(共10个空格,每格2分)

1. 已知以下程序的输出结果为: name: crq name: carter

请将程序补充完整 #include #include class A{ char* name; public: void PrintName() { (1) ;} A(char* name) { (2) ; (3) ; } ~A(){ (4) ;} }; 精品文档

精品文档

class B: public A{ public: B( (5) ) :A(n){} };

int main( ){ B b1(\ b1.PrintName(); b2.PrintName(); }

2. 定义一个函数模板,能够完成数组元素的求和,将以下程序补充完整: template< (6) > T sum( (7) , int n){ (8) ; for (int i=0;i

3. 请分别写出类A的一元运算符“++”的前缀方式和后缀方式的成员运算符函数形式的声明语句: (9) 、 (10) 。

四、程序分析题:(25分)(共2小题,第1小题10分,第2小题15分)

1. 分析程序,写出运行结果,并分析原因 #include using namespace std; class Base{ int y,m,d; public: Base(int _y=1, int _m=2, int _d=3){y = _y; m = _m; d = _d;} print(int y=1.5){cout<y = y;} };

class Derived: public Base{ double y,m,d; public: Derived(double y=1, double m=2, double d=3): Base(y,m,d),y(y),m(m),d(d) { } void print(double y=2.5){cout<y = y; } };

int main(){ Derived a(3.5, 4.5); Base& b = a, c=a; 精品文档

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4