欢迎访问桃李自考网,本站可为自考生提供学习指导服务,今天是

您所在的位置: 首页> 备考指导 > 历年真题 > 工学类 > 面向对象程序设计 > 全国2005年10月高等教育自学考试面向对象程序设计试题

全国2005年10月高等教育自学考试面向对象程序设计试题

发表时间:2022-07-06 11:39:15 来源:桃李自考网

全国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. 4 B. 2
C. 1 D. 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的成员对象,则“Y Obj”语句执行时,先调用类__________的构造函数,再调用类__________的构造函数。
16. 基类的公有成员在私有派生类中是__________成员,基类的保护成员在公有派生类中是__________成员。
17. 对虚函数使用对象指针或引用,系统使用__________联编,对虚函数使用对象调用时,系统使用__________联编。
18. 静态成员定义的关键字为__________,一般通过__________来访问静态成员。
19. 类在面向对象程序设计中非常重要,在设计类时可以参考一些原则,如充分利用__________增加类的自身可靠性,通过继承建立__________等等。
20. 将关键字__________写在函数体之前函数头之后,说明该函数是一个__________,可以防止函数改变数据成员的值。
三、改错题(本大题共5小题,每小题2分,共10分)
21.指出下面引用性说明类MyClass的用法的错误之处,并说明出错原因。
class MyClass;
void main() {
MyClass obj1;
MyClass *p;
void func( MyClass obj);
}
22.下面程序中有一处错误,请用下横线标出错误所在行并说明出错原因。
class base{
protected:
int p;
public:
Base(int m){p=m;}
};
void f()
{Base a(10);
cout<}
23.下面程序中有一处错误,请用下横线标出错误所在行并说明出错原因。
class base {
public: int x;
};
class One:public base{};
class Two:public base{};
class OT:public One,public Two{
public:int func();
};
void main() {
OT p;
p.base::x;
}
24.下面程序中有一处错误,请用下横线标出错误所在行并说明出错原因。
class Base{
public:virtual void fun()=0;
};
class Test:public Base{
public:virtual void fun(){cout<<″Test.fun=″<};
void main() {
Base a;
Test*p;p=&a;
}
25.下面程序中有一处错误,请用下横线标出错误所在行并提出修改意见。
class A{
private:
static int x;
};
void func(int a)
{
x=a;
}
四、完成程序题(本大题共5小题,每小题4分,共20分)
26.为使下面程序输出结果为:
1*2
3+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()
{
cout<}

void A::print() const
{
cout<}
void main()
{
A a(1, 2);
const A b(3, 4);
a.print();
b.print();
}
27. 在下面横线处填上适当字句,完成类中成员函数的定义。
#include
class A
{
private:
intX,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 A[2];
Ptr[0].SetXY(5,10);
Ptr[1].SetXY(15,20);
cout<<″Release Ptr ……″<②__________;//释放动态分配内存
return 0;
}
28.请在横线处填上适当的字句,以使程序完整。
#include
#include ″math.h″
class 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 Line
{
private:
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.Y;
return sqrt(dx*dx + dy*dy);
}
void main()
{
Point p1,p2(3,4);
Line L1(p1,p2);
cout<}
29.下面程序横线处填上适当的字句,使类定义完整。
#include
#include
class ArrayFloat
{
protected:
float *pA;
int size;//数组大小(元素个数)
public:
ArrayFloat(int sz=10)
{size=sz;
pA=new float[size];
}
~ArrayFloat(void)
{
①__________; //释放动态内存
}
int GetSize(void) const
{return size;
}
float& operator[](int i) //重载数组元素操作符″[]″
{return pA[i];
}
void Print();
};
void ArrayFloat::Print()
{int i;
for(i=0; i< ②__________; i++)
{
if (i%10==0)
cout << endl;
cout<}
cout<}
void main()
{ArrayFloat a(20);
for (int i=0; ia[i]=(float)i* 2;
a.Print();
}
30.在横线处填上适当字句,完成下面复数类的定义。
#include
class Complex
{
private:
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:: operator = (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; cout<<″B(″<~B() { cout<<″~B()\n″;}
void print() { cout <} ;
class D: public B{
private:
int Z;
public:
D (int y, int z):B(y)
{Z=z;
cout<<″D(″<}
~D() { cout<<″~D()\n″; }
void print() {
B∶∶print();
cout <}
};
void main()
{D d(11,22);
d.print();
}
32.写出下面程序的输出结果。
#include
class A
{
private:
double X,Y;
public:
A(double xx=0, double yy=0)
{X=xx;Y=yy;
cout<<″构造函数被调用(″<}
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
class A{
public:
virtual void f() {cout<<″A::f()\n″; }
};
class B:public A
{
private:
char *buf;
public:
B(int i) {
buf=new char[i];
}
void f() {
cout<<″B::f()\n″;
}
~B() {delete []buf; }
};
void main()
{A *a=new A;
a->f();delete a;
a=new B(15);a->f();
}
34.写出下面程序的输出结果。
#include
void main()
{int a[9]={1,2,3,4,5,6,7,8,9};
for(int i=0; i<9; i++) {
cout << setw(4) << a[i];
if(i%3==2)
cout<}
}
35.写出下面程序的输出结果。
#include
template
void print(T a[],int n )
{for(int i=0; i{cout<if (i%5==4)
cout<}
cout<}
void main()
{
int a[]={1, 2, 3, 4, 5, 6, 7};
double b[4]={8, 9, 10, 11 };
print(a,sizeof(a)/sizeof(int));
print(b,4);
}
36.写出下面程序的输出结果。
#include
class A
{
private:
static int n;
int X;
public:
A(int x=0) { X=x; n++; }
~A() { n-- ; }
static int GetNum(){ return n; }
void print();
};
void A∶∶print() { cout << ″n=″ << n << ″, X=″ << X<< endl; }
int A∶∶n = 0;
void main()
{A *p=new A(12);
p->print();
A a(34);
a.print();
delete p;
cout << ″n=″ << A::GetNum() << endl;
}