考试课程名称: 面向对象程序设计 学时: 考试方式:闭卷 考试内容:
一、单项选择题(本大题共12小题,每小题2分,共24分)
1、C++对C语言作了很多改进,即从面向过程变成为面向对象的主要原因是( ) A. 增加了一些新的运算符 B. 规定函数说明符必须用原型
C. 允许函数重载,并允许设置缺省参数 D. 引进了类和对象的概念
2、在公有继承的情况下,基类成员在派生类中的访问权限( ) A. 受限制 B. 保持不变 C. 受保护 D. 不受保护
3、通过( )调用虚函数时,采用运行期动态绑定。
A. 对象指针 B. 对象名 C. 成员名限定 D. 派生类名
4、下列不是描述类的成员函数的是( )
A. 构造函数 B. 析构函数 C. 友元函数 D. 拷贝构造函数
5、以下叙述错误的是( )
A. 基类的保护成员在公有派生类中仍然是保护成员 B. 基类的保护成员在派生类中仍然是保护成员 C. 基类的保护成员在私有派生类中是私有成员 D. 基类的保护成员不能被派生类的对象访问
6、下面有关类说法不正确的是( )
A. 在一个类中可以说明具有类类型的数据成员 B. 一个类可以有多个构造函数 C. 析构函数需要指定参数 D. 一个类只有一个析构函数
7、假设Class Y : public X,即类Y是类X的派生类,则说明一个Y类的对象时和删除Y类对象时,调用构造函数和析构函数的次序分别为( ) A.X,Y;Y,X B.X,Y;X,Y C.Y,X;X,Y D.Y,X;Y,X
8、在派生类中重新定义虚函数时必须在( )方面与基类保持一致。 A. 参数类型 B. 参数名字 C. 操作内容 D. 赋值
9、下面对于指针的描述不正确的是( )
A. 指针是地址变量 B. 指针不能用除0以外的常量赋值
C. 两个指针变量的加减法无意义 D. 指针指向不同基类型的变量长度不同
10、构造函数不具备的特征的是( )
A. 构造函数的函数名与类名相同 B. 构造函数可以重载
C. 构造函数必须指定类型说明 D. 构造函数可以设置默认参数
11、在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是 ( ) A. 派生类的对象可以赋给基类的对象 B. 派生类的对象可以初始化基类的引用 C. 派生类的对象可以直接访问基类中的成员 D. 派生类的对象的地址可以赋给指向基类的指针
12、在 C++ 程序中,对象之间的相互通信通过 ( )
A. 继承实现 B. 调用成员函数实现 C. 封装实现 D. 函数重载实现
二、填空题(本大题共8小题,每小题2分,共16分)
1、假定 AB 为一个类,则语句 AB(AB &x) ;为该类 ________ 构造函数的原型说明。 派生类从一个或多个以前定义的该类的 _________ 继承数据和函数。
2、C++ 支持的两种多态性分别是 _________ 多态性和 _________ 多态性。
3、C++ 语言的函数参数传递方式有______和 ______ 。
4、带有________的类称为抽象类,它只能作为________来使用。
5、在下面的类定义中,私有成员有 _________ 。 class Location { int X,Y;
protected: int zeroX,zerxY;
int SetZero(int zeroX, int zeroY); private:
int length,height; public:
void init(int initX, int initY); int GetX(); int GetY(); };
6、在删除一个动态对象时,将自动调用该动态对象所属类的 _______ 函数;类的私有成员只能被它的成员函数和 _________ 访问。
7、如果表达式 ++i*k 中的“ ++ ”和“ * ”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为_________。
8、模板对处理数据的类型的要求不同可以分为两种类型:________和________。
三、改错题(本大题共5小题,每小题2分,共10分)
如果有错,请指出错误所在位置、说明出错原因并提出解决方法;
1、int & GetSum(int *a, int Num) {
int i, Sum;
for (i=0; i int main() { int a[6] = { 2, 3, 5, 7, 8,10 }; int Sum=GetSum(a, 6); … } 2、class C { public: C( ) { c=0; } private: const int c; static int x; }; int main() { C::x=-3; … } 3、class Base { public: Base(float a) { x=a; } float x; }; class Dep : public Base { public: Dep (int a) { y=a; } int y; }; int main() { Base a(5.0); Dep *b=(Dep *)&a; cout << b->x << endl; } 4、class A { public: void Func1(long) { /*…*/ } virtual void Func2(char) = 0; }; class B : public A { public: void Func1() { /*…*/ } void Func2(char) { /*…*/ } }; int main() { A a, *ptrA=NULL; B b; ptrA = &b; b.Func1(100); … } 5、class Complex { public: Complex(); Complex operator! (Complex &Obj) { /*…*/ } … }; Complex operator() ( Complex C1, Complex C2) { /*…*/ } 四、完成程序题(本大题共5小题,每小题4分,共20分) 1、 在下面程序段横线处填上适当的内容,使该程序输出结果为: Creating B end of B end of A 代码如下: class A { void main() public: A() { } { ①________ { cout << ″end of A ″; } A*pa=new B; }; delete pa; class B : public A { } public: B() { ②________ } ~B() { cout << ″end of B ″; } }; 2、在下面横线处填上适当内容,完成Distance函数的定义。 class Point { private: double X,Y; public: Point(double x=0, double y=0) {X=x; Y=y; } void Move(double x, double y) { X=x; Y=y; } friend double Distance(Point &p1, Point &p2); //计算两点间距 }; double Distance(Point &p1, Point &p2) void main() { double dx = ①________; { Point a(1,1), b(a); double dy = ②________; b.Move(4,5); return sqrt(dx*dx+dy*dy); cout << Distance(a,b) << endl; } } 3、在下面横线处填上适当内容,完成两个函数的定义。 class Complex { private: float real, imag; public: Complex(float r=0, float i=0 ) { real=r; imag=i;} Complex operator+ (Complex &b ); friend Complex operator- ( Complex &a, Complex &b ); }; Complex Complex::operator+ (Complex &b) { Complex *t = new Complex ( ①________ ); return *t; } Complex operator- ( Complex &a, Complex &b ) { Complex *t = new Complex ( ②________ ); return *t; } 4、在下面横线处填上适当字句,完成求最大值函数模板的定义。 template return ( x>y ? x : y ); } ①________ T Max(T x, T y, T z) { T t = Max(x,y); return ( ②________ ); } void main() { int x; double y; x = Max(5,6); y = Max(12.3, 3.4, 7.8); cout << \ \} 5、下面程序三次调用同一函数sum ,在横线处填上适当内容,使输出结果为: 搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新初中教育C++试卷样卷(软工) 全文阅读和word下载服务。
相关推荐: