答案:《C++面向对象程序设计》试题 (A卷)
(满分:100分 时间:150分钟 日期:2005.1.10)
一、(共20分,每题2分)单项选择
1. 已定义了一个类A并有语句A* pa=new A(5); 那么以下说易做图确的是:A
A. 该语句会创建A类的一个对象,并将此对象的地址赋给指针pa;
B. 该语句会创建A类的5个对象,且它们的地址是连续的;
C. 当指针变量pa超出其作用域时,pa和为对象分配的空间都将被自动释放;
D. 类A中一定有一个显式定义的构造函数和一个显式定义的虚析构函数;2. 定义类A的非静态成员函数A&f(A& one)时,需有语句return exp;则exp不能是:B
A.类A中类型为A的静态数据成员 B. f中用语句A a = one; 定义的量a
C. one D. *this3. 在一个类中,下列哪些成员可以是多个?D
A. 无参构造函数 B. 析构函数
C. 原型相同的非静态成员函数 D. 静态成员函数4. 对类T中的下列成员,若不考虑代码优化,一般来说它们中的哪个执行起来最慢?C
A. 缺省的无参构造函数 B. 缺省的拷贝构造函数
C. T f( ) { T t; return t; } D. 不能判定A、B、C哪个最慢5. 对函数原型为int& min(int& a, int& b);的全局函数,下列语句块哪个是错误的:C
A. int x=10,y=5; min(x,y)=100; B. int x=10,y=5, z; z=min(x,y+=x);
C. int x=10,y=5; min(x,10)=y; D. int x=10,y=5; x=min(x,y);6. 关于拷贝构造函数错误的说法有:B
A. 拷贝构造函数是一种特殊的构造函数,且不能在类中进行函数重载。
B. 若自定义派生类的拷贝构造函数,那么也必须自定义基类的拷贝构造函数。
C. 拷贝构造函数只能有一个参数,且为常量引用或非常量引用。
D. 拷贝构造函数不允许在函数体中使用return语句。7. 下列对虚基类声明正确的是: B
A. class virtual B: public A B. class B: virtual public A
C. class B: public A virtual D. virtual class B: public A8. 若有语句A*const p=new B;,其中类B是从类A直接派生得到的,那么下列说法错误的是:D
A. 若要执行语句 p->f( );,那么类A中一定有一个与f( )函数匹配的函数声明。
B. 类B一定是通过public继承方式从类A派生的。
C. 类B的构造函数中,至少有一个无参的或提供全部缺省参数的构造函数。
D. 通过指针p,只能访问类中的常量成员函数或静态成员函数。9. 下面说明的哪个数据不能作为类T的数据成员定义。D
A. T* pT B. class Q{ } q1,q2;
C. static T t; D. const T t;10. 下列哪种运算符可以被重载:D
A. sizeof B. :: C. ?: D. [ ]二、(共15分,每题3分)回答下列各题,可以举例说明。
1. 说明基类中的public、protected和 private成员分别在public、protected和private继承方式下在派生类中的可访问性。略
2. 若类A有私有数据成员int n,哪些情况下,在一个函数的函数体中能够直接访问A类的数据成员n。(至少三种)
如: a)void A::f( ) { int k=n;}
b)void A::g(A& one) { n+=one.n; }
c) A的友员函数 int h(A& one) {return one.n;}
3. 哪些情况下,定义构造函数时必须使用初始化列表。(至少三种)
4. 将一个基类的析构函数定义为虚函数的作用和目的是什么?
5. 为什么在类中不能用成员函数void f(int&) 重载(overload)本类的成员函数int f(int)?
会产生二义性
三、(共10分,每题1分)判断正误,只需回答“正确”或“错误”。 2468正确
1. this指针既可以是指向常量对象的非常量指针,也可以是指向非常量对象的常量指针。
2. 即使不创建类的实例对象,也可以在main函数中访问该类的公有静态成员函数。
3. 在一个函数体内不允许定义其它函数,同样在一个类中也不允许定义其它类。
4. 若想在一个cpp文件中使用一个模板类,那么在预编译后,此文件必须含有该模板类的全部声明和定义。
5. 在捕获异常时,异常会进行自动类型转换并按照异常类型的同一性进行匹配。
6. 一个抽象类的后裔类,既可以是抽象类,也可以是具体类。
7. 类A中的转换函数可定义为: int operator A( ) const {return 0;}.
8. 类的多个实例对象可共享本类的虚拟表。
9. 用const修饰的成员函数只能通过常量对象调用。
10. 类B是类A的派生类,类C是类A的友员类,那么类C也是类B的友员类。