1、) DMyA(MyA)4.一个函数功能不太复杂,但要求被频繁调用,则应把它定义为 (A )A内联函数 B重载函数 C递归函数 D嵌套函数5.以下有关继承的叙述正确的是 ( B)A构造函数和析构函数都能被继承B派生类是基类的组合C派生类对象除了能访问自己的成员以外,不能访问基类中的所有成员D基类的公有成员一定能被派生类的对象访问6. 解决二义性问题的方法有(C )A只能使用作用域分辨操作符 B使用作用域分辨操作符或赋值兼容规则C使用作用域分辨操作符或虚基类 D使用虚基类或赋值兼容规则7. 假设类X以类Y作为它的一个基类,并且X类的名字func()支配Y类的名字func(),obj为类X的对象,则
2、obj.func()语句实现的功能为 ( C)A先执行类X的func(),再执行访问类Y的func()B先执行类Y的func(),再执行访问类X的func() C执行类X的func()D执行类Y的func()8.以下叙述正确的是( C)A构造函数调用虚函数采用动态联编B构造函数可以说明为虚函数C当基类的析构函数是虚函数时,它的派生类的析构函数也是虚函数D析构函数调用虚函数采用动态联编9.以下关于抽象类的描述正确的是 ( D)A不能说明指向抽象类对象的指针或引用B可以说明抽象类对象C抽象类的纯虚函数的实现可以由自身给出,也可以由派生类给出D抽象类的纯虚函数的实现由派生类给出10.在下面格式化命令
3、的解释中,错误的是 ( C)Aios:skipws 跳过输入中的空白字符Bios:fill() 获得当前的填充字符Cios:hex 转换基数为八进制形式Dios:precision 返回当前的精度11.下面运算符中,不能被重载的运算符是( C)A= B C?D12.下列有关模板和继承的叙述正确的是 ( D)A模板和继承都可以派生出一个类系B从类系的成员看,模板类系的成员比继承类系的成员较为稳定C从动态性能看, 继承类系比模板类系具有更多的动态特性D相同类模板的不同实例一般没有联系,而派生类各种类之间有兄弟父子等关系二、填空题(本大题共8小题,每小题2分,共16分)请在每小题的空格中填上正确答案
4、。错填、不填均无分。13. 在C+中函数原型不但能标识函数的_名称_,而且能标识函数参数的_类型和个数_。14. 如果类的名称是MyClass则析构函数名为_MyClass_,一个类最多能有_1_个析构函数。15. 假设类X的对象x是类Y的成员对象,则“Y Obj”语句执行时,先调用类_X_的构造函数,再调用类_Y_的构造函数。16. 基类的公有成员在私有派生类中是_私有_成员,基类的保护成员在公有派生类中是_保护_成员。17. 对虚函数使用对象指针或引用,系统使用_动态_联编,对虚函数使用对象调用时,系统使用_静态_联编。18. 静态成员定义的关键字为_static_,一般通过_成员名限定_
5、来访问静态成员。19. 类在面向对象程序设计中非常重要,在设计类时可以参考一些原则,如充分利用_封装_增加类的自身可靠性,通过继承建立_类族_等等。20. 将关键字_写在函数体之前函数头之后,说明该函数是一个_,可以防止函数改变数据成员的值。三、改错题(本大题共5小题,每小题2分,共10分) 21.指出下面引用性说明类MyClass的用法的错误之处,并说明出错原因。class MyClass;void main() MyClass obj1;MyClass *p;void func( MyClass obj);22.下面程序中有一处错误,请用下横线标出错误所在行并说明出错原因。class ba
6、seprotected:int p;public:Base(int m)p=m;void f() Base a(10);coutA.PENDL;23.下面程序中有一处错误,请用下横线标出错误所在行并说明出错原因。class base int x;class One:public base;class Two:class OT:public One,public Two int func();OT p;p.base:x;24.下面程序中有一处错误,请用下横线标出错误所在行并说明出错原因。class Base virtual void fun()=0;class Test: public Base
7、 virtual void fun()coutTest.fun=Base a;Test*p; p=&a;25.下面程序中有一处错误,请用下横线标出错误所在行并提出修改意见。class Aprivate:static int x;void func(int a)x=a;四、完成程序题(本大题共5小题,每小题4分,共20分) 26.为使下面程序输出结果为:1*23+4 请在横线处填上适当的字句,以使程序完整。#include class A int R1, R2;A(int r1, int r2) R1=r1; R2=r2; void print();void print() const;void
8、 A:print() R1 _R2endl;print() const _ void main() A a(1, 2);const A b(3, 4);a.print();b.print();27. 在下面横线处填上适当字句,完成类中成员函数的定义。class Aint X,Y;A() X=Y=0; A(int xx,int yy) :X(xx),Y(yy) A(A &a) _ int GetX() return X;int GetY() return Y;void SetXY(int x,int y) X=x; Y=y;int main()A * Ptr=new A2;Ptr0.SetXY(
9、5,10);Ptr1.SetXY(15,20);Release Ptr _; /释放动态分配内存return 0;28.请在横线处填上适当的字句,以使程序完整。#include math.hclass Point double X,Y;_Line;Point(double x=0, double y=0) X=x;Point(Point &p)X=p.X; Y=p.Y;class LinePoint p1,p2;Line(Point &xp1, Point &xp2): _double GetLength();double Line:GetLength() double dx=p2.X-p1.
10、X;double dy=p2.Y-p1.Y;return sqrt(dx*dx + dy*dy);void main()Point p1,p2(3,4);Line L1(p1,p2);L1.GETLENGTH()29.下面程序横线处填上适当的字句,使类定义完整。#includeclass ArrayFloatfloat *pA;int size; /数组大小(元素个数)ArrayFloat(int sz=10) size=sz;pA=new floatsize;ArrayFloat(void) _; /释放动态内存 int GetSize(void) const return size;flo
11、at& operator(int i) /重载数组元素操作符 return pAi;void Print();void ArrayFloat:Print() int i;for(i=0; i _; i+)if (i_=0) cout endl;SETW(6) ArrayFloat a(20);for (int i=0; iai=(float)i* 2;a.Print();30.在横线处填上适当字句,完成下面复数类的定义。class Complexdouble real, image;Complex(double r=0,double i=0) real=r; image=i;friend Complex operator+(Complex &a,const Complex &c); /复数加法运算符Complex operat
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1