一、 填空题(每空 1 分,共 15 分)
1 、 输入操作由操作符 >> 来表达。
2 、 以 /* 开始,以 */ 结束,在 /* 和 */ 之间的部分即为 注释 。
3 、 若有运算符 > 、 *= 、 sizeof 、 % ,则它们按优先级由高至低的排列次序为 sizeof 、 % 、 *= 、 > 。
4 、 描述命题 “A 小于 B 或小于 C” 的表达式为 A
10 、当一个成员函数被调用时,该成员函数的 this 指针 指向调用它的对象。
11 、拷贝初始化构造函数使用 引用 来初始化创建中的对象。 12 、派生类可以定义其 基类 中不具备的数据和操作。
13 、在一个继承结构中,当两个相同的名字之间没有 作用域分辨符限定 时,对此 名字的访问将出现二义性。
14 、一元操作符,作为友元函数重载时只能声明 对象 形参;作为类成员 函数重载时 不需要 形参。
二、 单项选择题(每小题 1 分,共 11 分) 1 、连接器所生成的文件的扩展名为( D ) A 、 .cpp B 、 .obj C 、 .lib D 、 .exe
2 、下列符号中,( b)不是分隔符。 A 、; B 、 // C 、() D 、{}
3 、设 int a=3,b=4,c=5; 表达式( a+b ) >c&&b==c 的值是( C )。 A 、 2 B 、 -1 C 、 0 D 、 1
4 、下列标识符中,不合法的用户标识符为(A ) A 、 a#b B 、 _int C 、 a_10 D 、 PAd
5 、 while(!x) 中的 (!x) 与下面条件( D )等价。 A 、 x==1 B 、 x!=1
C 、 x!=0 D 、 x==0
6 、定义析构函数时,应该注意( C ) A 、其名与类名完全相同 B 、返回类型是 void 类型 C 、无形参,也不可重载
D 、函数体中必须有 delete 语句 7 、每个类( C )构造函数。 A 、只能有一个 B 、只可有公有的 C 、可以有多个 D 、只可有缺省的
8 、在一个类中可以对一个操作符进行( D )重载。 A 、 1 种 B 、 2 种以下 C 、 3 种以下 D 、多种
9 、重载赋值操作符时,应声明为( A )函数。 A 、 友元 B 、 虚 C 、 成员 D 、 多态
10 、在公有继承的情况下,基类成员在派生类中的访问权限( B ) A 、 受限制 B 、 保持不变 C 、 受保护 D 、 不受保护
11 、通过( A )调用虚函数时,采用动态束定。 A 、 对象指针 B 、 对象名 C 、 成员名限定 D 、 派生类名
三、 双项选择题(在每小题的五个备选答案中,选出二个正确的答案,并将其序号填在
题中的括号内,每小题 2 分,共 18 分) 1 、在( C )( E )情况下适宜采用 inline 定义内联函数。 A 、 函数体含有循环语句 B 、 函数体含有递归语句 C 、 函数代码少、频繁调用 D 、 函数代码多、不常调用 E 、 需要加快程序执行速度
2 、在类中说明的成员可以使用关键字( A )( D )进行修饰。 A 、 private B 、 extern
C 、 auto D 、 public E 、 register
3 、如果类 A 被说明成类 B 的友元,则( D )( E )。 A 、 类 A 的成员即类 B 的成员 B 、 类 B 的成员即类 A 的成员
C 、 类 A 的成员函数不得访问类 B 的成员 D 、 类 A 的成员函数可以访问类 B 的成员 E 、 类 B 不一定是类 A 的友元
4 、创建或删除堆对象,需要使用操作符( B )( C ) A 、- > B 、 new C 、 delete D 、 . E 、 *
5 、在类中声明转换函数时不能指定( A )( C ) A 、 参数 B 、 访问权限 C 、 返回类型 D 、 操作 E 、 标识符
6 、在派生类中重新定义虚函数时必须在( A )( B )方面与基类保持一致。 A 、 参数个数 B 、 参数类型 C 、 参数名字 D 、 操作内容 E 、 赋值
7 、字符串之间的比较按( C )( E )进行。 A 、 字符串的长度 B 、 字符的大小写种类 C 、 字符串的内部代码 D 、 字符串的含意 E 、 从头至尾的顺序
8 、 C++ 类体系中,不能被派生类继承的有( B )( E )。 A 、 转换函数 B 、 构造函数 C 、 虚函数
D 、 静态成员函数 E 、 赋值操作函数
9 、下列虚基类的声明中正确的是( B )( D ) A 、 class virtual B: public A B 、 class B: virtual public A C 、 class B: public A virtual D 、 class B: public virtual A
E 、 virtual class B: public A
四、 简答题(每小题 5 分,共 30 分) 1 . 给出下面程序的运行结果。 # include “iostream.h” int main( ) { int i=1; while (i<=15)
if (++i%3!=2) continue; else cout <<”i=”<
答:输出结果: i=2 i=5 i=8 i=11 i=14
2. 给出下面程序的运行结果。 #include “iostream.h” class test{
private:int num float fl;
public:test( );
int getint( ){return num;} float getfloat( ){return fl;} ~test( ); };
test ∷ test( )
{ cout << \ num=0;fl=0.0; }
test ∷ ~ test( )
{ cout << \ int main( ) {test array[2];
cout << array[1].get int( )<< \ 答:结果为: Initalizing default Initalizing default 0 0
Desdtructor is active Desdtructor is active
3. 给出下面程序的运行结果。 #include \ int main( )
{ int num=50; int& ref=num; ref=ref+10
cout << \ num=num+40;
cout << \ return 0; }
答:输出结果: num=60 ref=100
4 . 若程序员没有为类定义拷贝初始化构造函数,则编译器将自动生成一缺省的拷贝初 始化构造函数,它可能会产生什么问题? 答: 若没有为类定义复制初始化构造函数,则编译器将会生成一个形如 ClassName::ClassNa me(const ClassName &) 的缺省复制初始化构造函数,它的执行方式为用作为初始值的对象的
成员初始化正在建立的对象的相应成员。这在有的情况下会产生问题,如果类的成员是一个指
针时,缺省复制初始化构造函数构造出的新对象中的指针将与原来的对象指向同一个变量。结
果在对象消失时,要进行析构,这时这个变量将会被删除两次,所以就会出错了。
5 . C++ 没有提供字符串数据类型,如何简单地构造此种数据类型? 答:可以定义一个字符数组作为字符串类型,如下: const int M=80; char str[M];
6 . 什么是多重继承中的支配原则?分析下面的类体系。 class A{ public: int i; void f(float); };
class B: public A{ public: int i; void f(int); };
则下面的访问是否具有二义性( b 为类 B 的一个对象)? b.i; b.f(3.5);
答:类 X 中的名字 N 支配类 Y 中同名的名字 N ,是指类 X 以类 Y 为它的一个基类,这就称为多重继
承的支配原则。在以上的访问中类 B 中的名字支配类 A 中的名字 i 和 f ,所以在访问时不存在二义 性。
五、 编程题(共 30 分)
相关推荐: