2008-2009学年C++ (下)期末考试模拟试题
一、选择题(每题  2 分,共30 分)
1. 下列程序段的运行结果是()。
char c[]= ”\t\v\\0will\n ”;cout<<strlen(c);
A. 4
B. 3
C. 9
D. 字符串中含有非法字符,输出结果不确定
2.已知定义类  A ,该类的构造函数的参数都没有缺省值。执行语句:
A a1(2) ,a2(1,2), *p=new A[3];
则自动调用该类缺省的构造函数的次数为()。
A. 1
B. 2
C. 3
D. 5
3. 下列叙述正确的是()。
A.  虚函数是一个static 类型的成员函数
B.虚函数是一个非成员函数
C.包含虚函数的基类为虚基类
D.包含存虚函数的基类为抽象类
4.下列关于赋值兼容性规则的叙述不正确的是()。
A.  派生类的对象可以赋值给基类的对象
B.  基类的对象可以赋值给派生类的对象
C. 派生类的对象可以初始化基类对象的引用
D.  可以将派生类对象的地址赋值给其基类的指针变量
5.设有定义  int a[][3]={1,3,5,7,9,11,13,15,17};int *p=a[2];则 *(p+1) 的值为()。
A. 15
B. 7
C. 14  B. 6
6. C++ 中多态性包括两种:编译时的和运行时的。运行时多态性是通过()实现
的。
①  函数重载②  运算符重载③  类继承关系④动态链接⑤  虚函数
A. ①和②
B. ③和⑤
C. ④和⑤
D. ③和④
7.关于动态内存分配,对delete 运算符的下列说法中,()是错误的。
A.应与 new 运算符配合使用。
B.可以在类的成员函数中使用。
C.对同一个指针变量可任意多次使用该运算符。
D.  若 a 是一个二维数组,则  delete []a;  可删除  a 所占用的存储空间。
8.设 int x; int *p2=&x, *p1=&x; *p1=a; *p2=*b;则变量  a 和 b 的类型分别是()。
A. int  和 int
B. int * 和 int
C. int 和 int *
D. int * 和 int *
9.下列关于成员函数的叙述不正确的是()。
A.成员函数一定是内联函数
B.成员函数可以重载
C.成员函数可以设置参数的默认值
D.成员函数可以是静态的
10.以下不属于类的访问权限的是()。
A. public
B. protected
C. static
D. private
11.若要使用  ifstream流定义一个流对象并打开一个文件时,应在程序开始使用  #include
命令,使之包含()。
A. iostream.h
B. fstream.h
C. stdio.h
D. strstream.h
12.下列叙述不正确的是()。
A.  对象之间可以相互赋值
B.  对象可以用作函数参数
C. 对象可以用作数组的元素
D. C++ 中可以有指向对象的指针
13. C++ 中不能被派生类继承的是()。
A.  虚函数
B.  析构函数
C. 静态成员函数
D. 运算符重载函数
14.不属于构造函数的特点是()。
A.  具有与类名相同的函数名
B.  返回类类型返回值
C. 允许重载
D. 在定义类的对象时自动调用
15.类型相同的两个指针不能进行的运算是()。
A. +
B. -
C. =
D. ==
二、填空题(每题  2 分,共  20 分)
1.函数参数传递方式有三种,分别为:值传递、地址传递和()。
2.面向对象的程序设计的三大特征是:()、继承性和多态性。
3.假定 A 为一个类,则语句A(A &x); 是此类()构造函数的原型说明。
4.在类的继承与派生中,缺省的继承方式是()。
5. C++ 的两种多态性分别是()多态性和()多态性。
6.运算符重载有两种实现方法,一种是通过友元函数来实现,另一种通过()
函数来实现。
7.根据数据的组织形式不同,可将文件分为二进制文件和()文件。
8.若希望类中的成员只能被该类的成员函数及该类的派生类的成员函数访问,则应加
上访问权限:()。
9.假定类  A 中有一个公用属性的静态数据成员b,在类外不通过对象名访问该成员b
的写法为()。
三、阅读程序题(每题  5 分,共  30 分)
1.下列程序运行结果为()。
#include <iostream.h>
#include <string.h>
char s(char *w,int y)
{
char t, *s1, *s2;
s1=w;
s2=w+y+5;
while(s1>s2)
{
t=*s1++;*s1=*s2--;*s2=t;
return *s1;
}
return *s1+2;
}
多态性与虚函数
void main(void)
{
char *p={"123"};
cout<<s(p,strlen(p));
}
2. 下列程序的输出结果是()。
#include <iostream.h>
class A
{
public:
int X;
A(int x){X=x*x;}
};
class S
{ int x;
A a;
public:
S(int b,int c):a(c)
{x=b+a.X;}
void show(){cout<<"x="<<x<<endl;}
};
void main(void)
{ S s1(2,3);
s1.show();
}
3. 下列程序的运行结果是()。
#include <iostream.h>
class A
{
public:
int n;
A(){cout<<"A";}
};
class B:public A
{
public:
B(){cout<<"B";}
};
class C:public B
{
A a;
public:
C():a(),B(){cout<<"C";}
};
void main(void)
{ C c;
}
4. 下列程序的运行结果是()。
#include <iostream.h>
class Base
{
protected:
int *p;
public:
Base(int a=0)
{p=new int (a);}
~Base()
{delete p;}
virtual void print()
{cout<<"p->"<<*p<<endl;}
};
class Derived:public Base
{
static int y;
public:
Derived(int b=0)
{*p=b;y++;}
void print()
{cout<<*p<<','<<y<<endl;}
};
int Derived::y=100;
void main(void)
{
Derived d(50);
Base *pb=&d;
pb->print();
Derived d1(20);
d1.print();
}
5. 下列程序的运行结果是()
#include <iostream.h>
class B
{
int a,b;
public:
B(int aa=0,int bb=0){a=aa;b=bb;}
void operator ++();
void operator ++(int);
void show(){cout<<a<<'\t'<<b;}
};
void B:: operator ++()
{
a+=2;
b+=5;
}
void B:: operator ++(int)
{
a+=5;
b+=2;
}
void main(void)
{
B x(3,5);
x++;
x.show();
}
6. 下列程序的运行结果是()。
#include <iostream.h>
class A
{
public:
A(int n){num=n;}
int compare(A a)
{