---
《C++面向对象程序设计》考试试题
本试卷满分 100 分;
请将答案写在答题纸上,写明题号,不必抄题,字迹工整、清晰;
请在答题纸和试题纸上都写上你的班级,学号和姓名,交卷时请将试题纸、答题纸和草纸一并交上来。
一、单选题 (共 10 分,每题 1 分 )
1. C++ 中解决命名冲突的机制是: D
(A) 虚基类 (C) 函数重载 (B) 虚函数 (D) 名字空间 2. 若类 A 的一个对象所占的内存空间中包含虚函数表的入口地址 ,则: C
(A) 类 A 不能有静态数据成员 (B) 类 A 中公有的成员函数一定是虚的
类 A 中至少有一个成员函数是虚(C) 的 (D) 类 A 的析构函数一定是虚的
3.任意一个类,析构函数的个数最多是: B
(A) 不限个数 (B) 1 (C) 2 (D) 3
4. 下列关于 this 指针的说法 ,哪个是正确的 :
D
(A) this 指针一定指向常量型数
据 (B) this 指向的数据不可更改
(D) this 指针本身可直接作为成员函数的返
(C) 静态成员函数中也可以访问 this 指针 回值
5.在类定义中 , 为说明成员的访问权限 , private, protected, public 可以出现次数为: A
(B) 每种至多一次 (A) 次数没有具体限定 (D) 每种至少一次
p 可以作为函void f( A* const pp); 的实参:
6.下面哪种定义方式是正确的,并且使得 数 A
(A) A * p = new A; (B) A a; A* p = a;
(C) public 至少一次
7. obj 是类 A 的一个对象,执行语const A& aA= obj; ,则下列说法正确的
C 句 是:
类 A 的拷贝构造函数会被调(A) 用 (B) 类 A 的赋值函数会被调用
语句 obj.f( ) ;等价于语
(C) &aA 的值就是 &obj (D) 句 aA.f( ) ; 8.下面关于访问类 A 的私有数据成员的说法,错误的
C 是:
(A) 类 A 的友元函数可以访问类 A 的私有成员。
(B) 类 A 的友元类中的非静态成员函数可以访问类 A 的私有成员。 (C) 类 A 的嵌套类中的非静态成员函数可以访问类 A 的私有成员。
类 A 中的非静态成员函数可以访问(D) 类 A 的私有成员。
(C) const A* p = new A;
(D) A a; const A* p = a;
A 的
9.类 A 中有唯一的一个成员函数 f ,且 f 是公有的静态或非静态成员函数,对于类 一
----- ---
10. 下面关于类的成员函数描述不正确的是: A
(A) 静态成员函数内可以直接访问类的非静态成员数据
(B) 静态成员函数内可以直接访问类的静态成员数据
个对象 a,执行语句 a.f(100); 成功,那么 f 的函数原型不可以是: B (A) A& f( int, int=50 ); (B) void f(int& ) ;
const A * f(const (C) int ); (D) A f( const int&);
----- ---
(D) 非静态成员函数可以直接访问类的静态成员数据(全局成员)
二、判断正误,对于你认为错误的论述,说明原因或举出反例。 (每题 2 分,共 20 分)
ostream 和 istream,那么这个重
1. 重载流操作符 <<和 >> 时,如果第一个参数的类型为 载函 数既可以用于标准输入输出流,也可以用于文件流上。 对, ostream 和 istream 是标准输入输出流、文件流、字符串流的基类 2. 在同一个类中,可以定义重载的成员函数 void f(int); 和 virtual void f(int); 。 错,这属于重复定义
3. 抽象类不会产生实例,所以不需要有构造函
数。错,被派生时需要它的构造函数
4. 类 A 有一个非静态的成员函数 f ,其函数原型是: void A::f( ) const,则该函数被调用
时,
5. 异常必须在其产生的当前函数中捕获,而不能在外层函数中捕获该异
常。错,可以在外层捕获,并且这是最常见的用法
一定是通过类 A 或类 A 的某后裔类的一个用 const 修饰符说明的常量对象调用的。错,常函数可以由变量对象或常量对象调用
(C) 非静态成员函数可以直接访问类的非静态成员数据
6. 只要程序中没有 A a1 = a2; 和 A a1(a2); 形式的代码,类 A 的拷贝构造函数就不会被调
用。
7. 在 protected 继承方式下,派生类对象的指针不能直接转换成指向基类对象的
指针。对,否则基类中的公有成员由不可见变为可见,权限被放大
8. 若静态成员函数中调用了一个函数 f,那么 f 一定不是虚函数。
对,静态成员函数不能是虚函数,因为虚函数入口需要在保存在对象中的虚函数表中,而静态成员函数不属于对象。
9. 若要实例化一个含有引用型数据成员的类,那么只能使用构造函数初始化列表来初
始化该数据成员。
10. 构造函数的函数体中,不能使用 return 语句;但在实现该类的自动类型转化函数时,
必须有 return 语句。
对
三、回答下列各题(每题 4 分,共 20 分)
1. 举例说明 static 关键字的用法和相应目的 (至少 3 种 )。
f(){ static int a; ? } 函数体内的静态变量,每次调用该函数时值保持不变 static int a; 全局的静态变量,约束作用域为所在文件 class A {static int a; ?}; A 的静态成员,类似全局变量,需用
A::a 访问
(至少 3 种 )。
2. 举例说明类的数据成员在哪些情况下必须在初始化列表中进行初始化
基类不提供无参的构造函数
成员对象不提供无参的构造函数 有常量成员或引用成员
3. 举例说明虚拟继承的作用和目的。
----- 错,参数传递或函数返回时也调用拷贝构造函数
对,没有别的办法