1、一、单项选择题 ( 在每小题的四个备选答案中选出一个正确答案,并将其号码填在题干的括号内。每小题 2 分,共 20 分 ) 1. 所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是 ( ) A. 类 B. 对象 C. 函数体 D. 数据块 2. 面向对象的程序设计语言必须具备的关键要素是 ( ) A. 抽象和封装 B. 抽象和多态性 C. 抽象、封装、继承和多态性 D. 抽象、封装和继承性 3. 类的构造函数被自动调用执行的情况是在定义该类的 ( ) A. 成员函数时 B. 数据成员时 C. 对象时 D. 友元函数时 4. 设有函数模板 template Q
2、Sum(Qx,Qy) return(x)+(y); 则下列语句中对该函数模板 错误 的使用是 ( ) A.Sum(10,2); B.Sum(5.0,6.7) ; C.Sum(15.2f,16.0f); D.Sum( AB , CD ); 5. 已知类 A 是类 B 的友元,类 B 是类 C 的友元,则 ( ) A. 类 A 一定是类 C 的友元 B. 类 C 一定是类 A 的友元 C. 类 C 的成员函数可以访问类 B 的对象的任何成员 D. 类 A 的成员函数可以访问类 B 的对象的任何成员 6. 如果表达式 +i*k 中的“ + ”和“ * ”都是重载的友元运算符,则采用运算符函数调用格式
3、,该表达式还可表示为 ( ) A.operator*(i.operator+(),k) B.operator*(operator+(i),k) C.i.operator+().operator*(k) D.k.operator*(operator+(i) 7. 下列说法中正确的是 ( ) A. 类定义中只能说明函数成员的函数头,不能定义函数体 B. 类中的函数成员可以在类体中定义,也可以在类体之外定义 C. 类中的函数成员在类体之外定义时必须要与类声明在同一文件中 D. 在类体之外定义的函数成员不能操作该类的私有数据成员 8. 若派生类的成员函数不能直接访问基类中继承来的某个成员,则该成员一定
4、是基类中的 ( ) A. 私有成员 B. 公有成员 C. 保护成员 D. 保护成员或私有成员 9. 对基类和派生类的关系描述中, 错误 的是 ( ) A. 派生类是基类的具体化 B. 基类继承了派生类的属性 C. 派生类是基类定义的延续 D. 派生类是基类的特殊化 10. 类 B 是类 A 的公有派生类,类 A 和类 B 中都定义了虚函数 func(),p 是一个指向类 A 对象的指针,则 p-A:func() 将 ( ) A. 调用类 A 中的函数 func() B. 调用类 B 中的函数 func() C. 根据 p 所指的对象类型而确定调用类 A 中或类 B 中的函数 func() D.
5、 既调用类 A 中函数,也调用类 B 中的函数 二、填空题 ( 每小题 2 分,共 20 分 ) 11. 假定用户没有给一个名为 AB 的类定义析构函数,则系统自动给出的缺省析构函数定义为 _ 。 12. 模板定义中标识类型的参数必须用关键字 _ 修饰。 13. 表达式 counthex 还可表示为 _ 。 14. 通过 C+ 语言中的 _ 机制,可以从现存类中构建其子类。 15. 要在调用虚函数的时候强制进行静态联编,可以通过在调用中对虚函数加 _ 实现。 16. 封装要求一个对象应具备明确的功能,并具有 _ 以便和其它对象相互作用。 17. 在删除一个动态对象时,将自动调用该动态对象所属类
6、的 _ 函数。 18. 静态成员函数、友元函数、构造函数和析构函数中,不属于成员函数的是 _ 。 19. 在下面的类定义中,私有成员有 _ 。 class Location int X,Y; protected: int zeroX,zerxY; int SetZero(intzeroX, intzeroY); private: int length,height; public: void init(int initX,int initY); int GetX(); int GetY(); ; 20. 类的私有成员只能被它的成员函数和 _ 访问。 三、改错题 ( 每小题 2 分,共 10 分
7、 ) 21. 此类定义有一处错误,请指出错误并改正。 class ABC int a; public: ABC(int aa)a(aa) ; 22. 下面程序通过调用函数模板实现计算两个正整数的最大公约数,把 main 函数中错误找出并改正过来。 #include template T gcd(Tx,Ty) while(x! =y) if(xy)x-=y; else y-=x; return x; void main() int a; double d; cinad; coutgcd(a,d)endl; 23. 指出下面程序中的错误,并说明出错原因。 #include class ConstF
8、un public: void ConstFun() const int f5()constreturn 5; int Obj() return 45; int val; int f8(); ; int ConstFun:f8()return val; void main() const ConstFun s; int i=s.f5(); cout Value= iendl; 24. 指出下面程序中的错误,并说明错误原因。 #include class A public:void fun()cout a.fun endl; ; class B public:void fun()cout b.f
9、un endl; void gun()cout b.gun endl; ; class C:public A,public B private:int b; public:void gun()cout c.gun endl; ; void main() c obj; obj.fun(); obj.gun(); 25. 指出下面程序段中的错误,并说明出错原因。 class Location int X,Y; protected: int zeroX,zeroY; int SetZero(int zeroX,int zeroY)X=zeroX;Y=zeroY; private: int lengt
10、h,height; public: float radius; void init(int initX,int initY)length=initX;height=initY; int GetX()return X; int GetY()return Y; ; int main() Location retangleA=25,20,3,5,6,7,3; return 0; 四、完成程序题 ( 每小题 4 分,共 20 分 ) 根据题目要求填空,完成程序。 26. 在下面程序段横线处填上适当的内容。 class A _ int n; public: A(int nn=0):n(nn) if(n=
11、0)a=0; else a=new int n ; _/ 定义析构函数,释放动态数组空间 ; 27. 在下面程序横线处填上适当内容,使程序执行结果为: 200_ _ 100 程序如下: #include template _ Tf(Tx,Ty) if(sizeof(T)=_) return x+y; else return x*y; void main() cout f(10,20) - f(45.5,54.5)endl; 28. 下面程序三次调用同一函数 sum ,在横线处填上适当内容,使输出结果为: S=2 S=5 S=9 程序如下: #include void sum(int i) st
12、atic int s; _; cout S= sendl; void main (void) int i; for (i=0;_) sum(i); 29. 请在下面横线处填上适当的内容,使程序的输出为: 7.00000 7 程序如下: #include viod main() double x=7; cout_x; coutendl_x; 30. 在下面程序横线处填上适当的内容,使该程序输出结果为: Creating B end of B end of A 程序如下: #include class A public: A() _cout end of A endl; ; calss B:public A public: B()_ B()cout end of B endl; ; v
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1