1、全国高等教育自学考试面向对象程序设计试题全国2005年10月高等教育自学考试面向对象程序设计试题课程代码:02328一、单项选择题(本大题共12小题,每小题2分,共24分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。1. 所谓多态性是指 ( )A. 不同的对象调用不同名称的函数 B. 不同的对象调用相同名称的函数 C. 一个对象调用不同名称的函数 D. 一个对象调用不同名称的对象2. 有如下程序段:int *p,a6=-1,0,1,2,3,4; p=a+3; 执行该程序段后,*p的值为 ( )A. 4 B. 2 C. 1 D. NU
2、LL3.类MyA的拷贝初始化构造函数是 ( )A. MyA() B. MyA(MyA*) C. MyA(MyA&) D. MyA(MyA)4.一个函数功能不太复杂,但要求被频繁调用,则应把它定义为 ( )A. 内联函数 B. 重载函数 C. 递归函数 D. 嵌套函数5.以下有关继承的叙述正确的是 ( )A. 构造函数和析构函数都能被继承B. 派生类是基类的组合C. 派生类对象除了能访问自己的成员以外,不能访问基类中的所有成员D. 基类的公有成员一定能被派生类的对象访问6. 解决二义性问题的方法有( )A. 只能使用作用域分辨操作符 B. 使用作用域分辨操作符或赋值兼容规则C. 使用作用域分辨操
3、作符或虚基类 D. 使用虚基类或赋值兼容规则7. 假设类X以类Y作为它的一个基类,并且X类的名字func()支配Y类的名字func(),obj为类X的对象,则obj.func()语句实现的功能为 ( )A. 先执行类X的func(),再执行访问类Y的func()B. 先执行类Y的func(),再执行访问类X的func() C. 执行类X的func()D. 执行类Y的func()8.以下叙述正确的是( )A. 构造函数调用虚函数采用动态联编B. 构造函数可以说明为虚函数C. 当基类的析构函数是虚函数时,它的派生类的析构函数也是虚函数D. 析构函数调用虚函数采用动态联编9.以下关于抽象类的描述正确
4、的是 ( )A. 不能说明指向抽象类对象的指针或引用B. 可以说明抽象类对象C. 抽象类的纯虚函数的实现可以由自身给出,也可以由派生类给出D. 抽象类的纯虚函数的实现由派生类给出10.在下面格式化命令的解释中,错误的是 ( )A. ios:skipws 跳过输入中的空白字符B. ios:fill() 获得当前的填充字符C. ios:hex 转换基数为八进制形式D. ios:precision 返回当前的精度11.下面运算符中,不能被重载的运算符是( )A. = B. C. ?: D. 12.下列有关模板和继承的叙述正确的是 ( )A. 模板和继承都可以派生出一个类系B. 从类系的成员看,模板类
5、系的成员比继承类系的成员较为稳定C. 从动态性能看, 继承类系比模板类系具有更多的动态特性D. 相同类模板的不同实例一般没有联系,而派生类各种类之间有兄弟父子等关系二、填空题(本大题共8小题,每小题2分,共16分)请在每小题的空格中填上正确答案。错填、不填均无分。13. 在C+中函数原型不但能标识函数的_,而且能标识函数参数的_。14. 如果类的名称是MyClass则析构函数名为_,一个类最多能有_个析构函数。15. 假设类X的对象x是类Y的成员对象,则“Y Obj”语句执行时,先调用类_的构造函数,再调用类_的构造函数。16. 基类的公有成员在私有派生类中是_成员,基类的保护成员在公有派生类
6、中是_成员。17. 对虚函数使用对象指针或引用,系统使用_联编,对虚函数使用对象调用时,系统使用_联编。18. 静态成员定义的关键字为_,一般通过_来访问静态成员。19. 类在面向对象程序设计中非常重要,在设计类时可以参考一些原则,如充分利用_增加类的自身可靠性,通过继承建立_等等。20. 将关键字_写在函数体之前函数头之后,说明该函数是一个_,可以防止函数改变数据成员的值。三、改错题(本大题共5小题,每小题2分,共10分)21.指出下面引用性说明类MyClass的用法的错误之处,并说明出错原因。class MyClass;void main() MyClass obj1;MyClass *p
7、;void func( MyClass obj);22.下面程序中有一处错误,请用下横线标出错误所在行并说明出错原因。class baseprotected:int p;public:Base(int m)p=m;void f() Base a(10); couta.pendl;23.下面程序中有一处错误,请用下横线标出错误所在行并说明出错原因。class base public: int x;class One:public base;class Two:public base;class OT:public One,public Twopublic: int func();void mai
8、n() OT p;p.base:x;24.下面程序中有一处错误,请用下横线标出错误所在行并说明出错原因。class Basepublic: virtual void fun()=0;class Test: public Basepublic: virtual void fun()coutTest.fun=endl;void main() Base a;Test*p; p=&a;25.下面程序中有一处错误,请用下横线标出错误所在行并提出修改意见。class Aprivate: static int x;void func(int a)x=a;四、完成程序题(本大题共5小题,每小题4分,共20分)
9、26.为使下面程序输出结果为:1*23+4 请在横线处填上适当的字句,以使程序完整。#include class A private: int R1, R2;public:A(int r1, int r2) R1=r1; R2=r2; void print(); void print() const; void A:print() coutR1 _R2endl; void A:print() const coutR1 _R2endl; void main() A a(1, 2); const A b(3, 4); a.print(); b.print(); 27. 在下面横线处填上适当字句,完
10、成类中成员函数的定义。#include class A private: int X,Y;public: 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(5,10); Ptr1.SetXY(15,20); coutRelease Ptr endl; _; /释放动态分配内存 return 0;28.请在横线处填上适
11、当的字句,以使程序完整。#include #include math.hclass Point private:double X,Y;_Line;public:Point(double x=0, double y=0) X=x; Y=y;Point(Point &p) X=p.X; Y=p.Y;class Lineprivate: Point p1,p2;public: Line(Point &xp1, Point &xp2): _ double GetLength();double Line:GetLength() double dx=p2.X-p1.X; double dy=p2.Y-p1
12、.Y;return sqrt(dx*dx + dy*dy);void main() Point p1,p2(3,4); Line L1(p1,p2); coutL1.GetLength()endl;29.下面程序横线处填上适当的字句,使类定义完整。#include#include class ArrayFloat protected:float *pA; int size; /数组大小(元素个数)public:ArrayFloat(int sz=10) size=sz;pA=new floatsize; ArrayFloat(void) _; /释放动态内存 int GetSize(void)
13、 const return size;float& operator(int i) /重载数组元素操作符 return pAi;void Print(); ;void ArrayFloat:Print() int i;for(i=0; i _; i+) if (i%10=0) cout endl;coutsetw(6)pAi; coutendl;void main() ArrayFloat a(20);for (int i=0; ia.GetSize(); i+) ai=(float)i* 2;a.Print(); 30.在横线处填上适当字句,完成下面复数类的定义。#include class
14、 Complexprivate:double real, image;public:Complex(double r=0,double i=0) real=r; image=i; friend Complex operator+(Complex &a,const Complex &c); /复数加法运算符Complex operator=(Complex c2); /复数赋值运算符 ;Complex operator+(Complex &a,const Complex &b) Complex *t = new Complex (_);return *t;Complex Complex: ope
15、rator = (Complex c2) real= c2.real;image = c2.image;return ( _);五、程序分析题(本大题共6小题,每小题5分,共30分)31.写出下面程序的输出结果。#include class B private: int Y;public: B(int y=0) Y=y; coutB(y)n; B() coutB()n; void print() cout Y ; ; class D: public Bprivate: int Z;public: D (int y, int z):B(y) Z=z;coutD(y,z)n; D() coutD(
16、)n; void print() Bprint();cout Zendl; ; void main() D d(11,22);d.print(); 32.写出下面程序的输出结果。#include class Aprivate: double X,Y;public: A(double xx=0, double yy=0) X=xx; Y=yy;cout构造函数被调用(X,Y)endl;A(A &p) X=p.X; Y=p.Y; ;A f() A a(1,2);return a;void main() A a(4,5); A b(a);b = f();33.写出下面程序的输出结果。#include
17、 class A public:virtual void f() coutA:f()n; ; class B:public Aprivate: char *buf;public:B(int i) buf=new chari; void f() coutf(); delete a;a=new B(15); a-f();34.写出下面程序的输出结果。#include void main() int a9=1,2,3,4,5,6,7,8,9; for(int i=0; i9; i+) cout setw(4) ai; if(i%3=2) coutendl; 35.写出下面程序的输出结果。#inclu
18、de template void print(T a,int n ) for(int i=0; in; i+) coutai ;if (i%5=4) coutendl;coutendl;void main() int a=1, 2, 3, 4, 5, 6, 7;double b4=8, 9, 10, 11 ;print(a,sizeof(a)/sizeof(int);print(b,4);36.写出下面程序的输出结果。#include class Aprivate:static int n;int X;public:A(int x=0) X=x; n+; A() n- ; static int GetNum() return n; void print();void Aprint() cout n= n , X= Xprint(); A a(34); a.print(); delete p; cout n= A:GetNum() endl;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1