2024年6月1日发(作者:平衍)
…………………………………………………………精品自学考试资料推荐………………………………………………
全国2018年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
C. 1
A. MyA()
B. 2
D. NULL
B. MyA(MyA*)
D. MyA(MyA)
3.类MyA的拷贝初始化构造函数是 ( )
C. MyA(MyA&)
A. 内联函数
C. 递归函数
4.一个函数功能不太复杂,但要求被频繁调用,则应把它定义为 ( )
B. 重载函数
D. 嵌套函数
5.以下有关继承的叙述正确的是 ( )
A. 构造函数和析构函数都能被继承
B. 派生类是基类的组合
C. 派生类对象除了能访问自己的成员以外,不能访问基类中的所有成员
D. 基类的公有成员一定能被派生类的对象访问
6. 解决二义性问题的方法有( )
A. 只能使用作用域分辨操作符 B. 使用作用域分辨操作符或赋值兼容规则
C. 使用作用域分辨操作符或虚基类 D. 使用虚基类或赋值兼容规则
7. 假设类X以类Y作为它的一个基类,并且X类的名字func()支配Y类的名字func(),obj
为类X的对象,则()语句实现的功能为 ( )
A. 先执行类X的func(),再执行访问类Y的func()
B. 先执行类Y的func(),再执行访问类X的func()
C. 执行类X的func()
D. 执行类Y的func()
1
…………………………………………………………精品自学考试资料推荐………………………………………………
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. 类在面向对象程序设计中非常重要,在设计类时可以参考一些原则,如充分利用
__________增加类的自身可靠性,通过继承建立__________等等。
2
…………………………………………………………精品自学考试资料推荐………………………………………………
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; ::x; } 24.下面程序中有一处错误,请用下横线标出错误所在行并说明出错原因。 class Base{ 3 …………………………………………………………精品自学考试资料推荐……………………………………………… public: virtual void fun()=0; }; class Test: public Base{ public: virtual void fun(){cout<<″=″< }; 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< 4 …………………………………………………………精品自学考试资料推荐……………………………………………… } void A::print() const { cout< } void main() { A a(1, 2); const A b(3, 4); (); (); } 27. 在下面横线处填上适当字句,完成类中成员函数的定义。 #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 A[2]; Ptr[0].SetXY(5,10); Ptr[1].SetXY(15,20); cout<<″Release Ptr ……″< ②__________; //释放动态分配内存 5 …………………………………………………………精品自学考试资料推荐……………………………………………… 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< 6 2024年6月1日发(作者:平衍) …………………………………………………………精品自学考试资料推荐……………………………………………… 全国2018年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 C. 1 A. MyA() B. 2 D. NULL B. MyA(MyA*) D. MyA(MyA) 3.类MyA的拷贝初始化构造函数是 ( ) C. MyA(MyA&) A. 内联函数 C. 递归函数 4.一个函数功能不太复杂,但要求被频繁调用,则应把它定义为 ( ) B. 重载函数 D. 嵌套函数 5.以下有关继承的叙述正确的是 ( ) A. 构造函数和析构函数都能被继承 B. 派生类是基类的组合 C. 派生类对象除了能访问自己的成员以外,不能访问基类中的所有成员 D. 基类的公有成员一定能被派生类的对象访问 6. 解决二义性问题的方法有( ) A. 只能使用作用域分辨操作符 B. 使用作用域分辨操作符或赋值兼容规则 C. 使用作用域分辨操作符或虚基类 D. 使用虚基类或赋值兼容规则 7. 假设类X以类Y作为它的一个基类,并且X类的名字func()支配Y类的名字func(),obj 为类X的对象,则()语句实现的功能为 ( ) A. 先执行类X的func(),再执行访问类Y的func() B. 先执行类Y的func(),再执行访问类X的func() C. 执行类X的func() D. 执行类Y的func() 1 …………………………………………………………精品自学考试资料推荐……………………………………………… 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. 类在面向对象程序设计中非常重要,在设计类时可以参考一些原则,如充分利用 __________增加类的自身可靠性,通过继承建立__________等等。 2 …………………………………………………………精品自学考试资料推荐……………………………………………… 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; ::x; } 24.下面程序中有一处错误,请用下横线标出错误所在行并说明出错原因。 class Base{ 3 …………………………………………………………精品自学考试资料推荐……………………………………………… public: virtual void fun()=0; }; class Test: public Base{ public: virtual void fun(){cout<<″=″< }; 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< 4 …………………………………………………………精品自学考试资料推荐……………………………………………… } void A::print() const { cout< } void main() { A a(1, 2); const A b(3, 4); (); (); } 27. 在下面横线处填上适当字句,完成类中成员函数的定义。 #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 A[2]; Ptr[0].SetXY(5,10); Ptr[1].SetXY(15,20); cout<<″Release Ptr ……″< ②__________; //释放动态分配内存 5 …………………………………………………………精品自学考试资料推荐……………………………………………… 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< 6