全国高等教育自学考试面向对象程序设计试题.docx
- 文档编号:27356982
- 上传时间:2023-06-29
- 格式:DOCX
- 页数:17
- 大小:18.90KB
全国高等教育自学考试面向对象程序设计试题.docx
《全国高等教育自学考试面向对象程序设计试题.docx》由会员分享,可在线阅读,更多相关《全国高等教育自学考试面向对象程序设计试题.docx(17页珍藏版)》请在冰豆网上搜索。
全国高等教育自学考试面向对象程序设计试题
全国2005年10月高等教育自学考试
面向对象程序设计试题
课程代码:
02328
一、单项选择题(本大题共12小题,每小题2分,共24分)
在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
错选、多选或未选均无分。
1.所谓多态性是指()
A.不同的对象调用不同名称的函数B.不同的对象调用相同名称的函数
C.一个对象调用不同名称的函数D.一个对象调用不同名称的对象
2.有如下程序段:
int*p,a[6]={-1,0,1,2,3,4};p=a+3;
执行该程序段后,*p的值为()
A.4B.2
C.1D.NULL
3.类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.使用作用域分辨操作符或虚基类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.以下关于抽象类的描述正确的是()
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.从类系的成员看,模板类系的成员比继承类系的成员较为稳定
C.从动态性能看,继承类系比模板类系具有更多的动态特性
D.相同类模板的不同实例一般没有联系,而派生类各种类之间有兄弟父子等关系
二、填空题(本大题共8小题,每小题2分,共16分)
请在每小题的空格中填上正确答案。
错填、不填均无分。
13.在C++中函数原型不但能标识函数的__________,而且能标识函数参数的__________。
14.如果类的名称是MyClass则析构函数名为__________,一个类最多能有__________个析构函数。
15.假设类X的对象x是类Y的成员对象,则“YObj”语句执行时,先调用类__________的构造函数,再调用类__________的构造函数。
16.基类的公有成员在私有派生类中是__________成员,基类的保护成员在公有派生类中是__________成员。
17.对虚函数使用对象指针或引用,系统使用__________联编,对虚函数使用对象调用时,系统使用__________联编。
18.静态成员定义的关键字为__________,一般通过__________来访问静态成员。
19.类在面向对象程序设计中非常重要,在设计类时可以参考一些原则,如充分利用__________增加类的自身可靠性,通过继承建立__________等等。
20.将关键字__________写在函数体之前函数头之后,说明该函数是一个__________,可以防止函数改变数据成员的值。
三、改错题(本大题共5小题,每小题2分,共10分)
21.指出下面引用性说明类MyClass的用法的错误之处,并说明出错原因。
classMyClass;
voidmain(){
MyClassobj1;
MyClass*p;
voidfunc(MyClassobj);
}
22.下面程序中有一处错误,请用下横线标出错误所在行并说明出错原因。
classbase{
protected:
intp;
public:
Base(intm){p=m;}
};
voidf()
{Basea(10);
cout< } 23.下面程序中有一处错误,请用下横线标出错误所在行并说明出错原因。 classbase{ public: intx; }; classOne: publicbase{}; classTwo: publicbase{}; classOT: publicOne,publicTwo{ public: intfunc(); }; voidmain(){ OTp; p.base: : x; } 24.下面程序中有一处错误,请用下横线标出错误所在行并说明出错原因。 classBase{ public: virtualvoidfun()=0; }; classTest: publicBase{ public: virtualvoidfun(){cout<<″Test.fun=″< }; voidmain(){ Basea; Test*p;p=&a; } 25.下面程序中有一处错误,请用下横线标出错误所在行并提出修改意见。 classA{ private: staticintx; }; voidfunc(inta) { x=a; } 四、完成程序题(本大题共5小题,每小题4分,共20分) 26.为使下面程序输出结果为: 1*2 3+4 请在横线处填上适当的字句,以使程序完整。 #include classA { private: intR1,R2; public: A(intr1,intr2){R1=r1;R2=r2;} voidprint(); voidprint()const; }; voidA: : print() { cout< } voidA: : print()const { cout< } voidmain() { Aa(1,2); constAb(3,4); a.print(); b.print(); } 27.在下面横线处填上适当字句,完成类中成员函数的定义。 #include classA { private: intX,Y; public: A(){X=Y=0;} A(intxx,intyy): X(xx),Y(yy){} A(A&a){ ①__________ } intGetX(){returnX;} intGetY(){returnY;} voidSetXY(intx,inty){X=x;Y=y;} }; intmain() { A*Ptr=newA[2]; Ptr[0].SetXY(5,10); Ptr[1].SetXY(15,20); cout<<″ReleasePtr……″< ②__________;//释放动态分配内存 return0; } 28.请在横线处填上适当的字句,以使程序完整。 #include #include″math.h″ classPoint { private: doubleX,Y; ①__________Line; public: Point(doublex=0,doubley=0){ X=x;Y=y; } Point(Point&p){ X=p.X;Y=p.Y; } }; classLine { private: Pointp1,p2; public: Line(Point&xp1,Point&xp2): ②__________{} doubleGetLength(); }; doubleLine: : GetLength() {doubledx=p2.X-p1.X; doubledy=p2.Y-p1.Y; returnsqrt(dx*dx+dy*dy); } voidmain() { Pointp1,p2(3,4); LineL1(p1,p2); cout< } 29.下面程序横线处填上适当的字句,使类定义完整。 #include #include classArrayFloat { protected: float*pA; intsize;//数组大小(元素个数) public: ArrayFloat(intsz=10) {size=sz; pA=newfloat[size]; } ~ArrayFloat(void) { ①__________;//释放动态内存 } intGetSize(void)const {returnsize; } float&operator[](inti)//重载数组元素操作符″[]″ {returnpA[i]; } voidPrint(); }; voidArrayFloat: : Print() {inti; for(i=0;i<②__________;i++) { if(i%10==0) cout< cout< } cout< } voidmain() {ArrayFloata(20); for(inti=0;i a[i]=(float)i*2; a.Print(); } 30.在横线处填上适当字句,完成下面复数类的定义。 #include classComplex { private: doublereal,image; public: Complex(doubler=0,doublei=0){real=r;image=i;} friendComplexoperator+(Complex&a,constComplex&c);//复数加法运算符 Complexoperator=(Complexc2);//复数赋值运算符 }; Complexoperator+(Complex&a,constComplex&b) { Complex*t=newComplex(①__________); return*t; } ComplexComplex: : operator=(Complexc2) { real=c2.real; image=c2.image; return(②__________); } 五、程序分析题(本大题共6小题,每小题5分,共30分) 31.写出下面程序的输出结果。 #include classB{ private: intY; public: B(inty=0){Y=y;cout<<″B(″< ~B(){cout<<″~B()\n″;} voidprint(){cout< }; classD: publicB{ private: intZ; public: D(inty,intz): B(y) {Z=z; cout<<″D(″< } ~D(){cout<<″~D()\n″;} voidprint(){ B∶∶print(); cout< } }; voidmain() {Dd(11,22); d.print(); } 32.写出下面程序的输出结果。 #include classA { private: doubleX,Y; public: A(doublexx=0,doubleyy=0) {X=xx;Y=yy; cout<<″构造函数被调用(″< } A(A&p){X=p.X;Y=p.Y;} }; Af() {Aa(1,2); returna; } voidmain() {Aa(4,5);Ab(a); b=f(); } 33.写出下面程序的输出结果。 #include classA{ public: virtualvoidf(){cout<<″A: : f()\n″;} }; classB: publicA { private: char*buf; public: B(inti){ buf=newchar[i]; } voidf(){ cout<<″B: : f()\n″; } ~B(){delete[]buf;} }; voidmain() {A*a=newA; a->f();deletea; a=newB(15);a->f(); } 34.写出下面程序的输出结果。 #include voidmain() {inta[9]={1,2,3,4,5,6,7,8,9}; for(inti=0;i<9;i++){ cout< if(i%3==2) cout< } } 35.写出下面程序的输出结果。 #include template voidprint(Ta[],intn)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全国 高等教育 自学考试 面向 对象 程序设计 试题