面向对象的程序设计第二阶段练习.docx
《面向对象的程序设计第二阶段练习.docx》由会员分享,可在线阅读,更多相关《面向对象的程序设计第二阶段练习.docx(24页珍藏版)》请在冰点文库上搜索。
面向对象的程序设计第二阶段练习
江南大学网络教育第二阶段练习题
考试科目:
《面向对象的程序设计》第章至第章(总分100分)
__________学习中心(教学点)批次:
层次:
专业:
学号:
身份证号:
姓名:
得分:
一单选题(共7题,总分值7分,下列选项中有且仅有一个选项符合题目要求,请在答题卡上正确填涂。
)
1.若一个类中含有纯虚函数,则该类称为(C)(1分)
A.基类
B.虚基类
C.抽象类
D.派生类
2.下列运算符中,不能用友元函数重载的是(A)(1分)
A.=
B.>
C.<
D.<>
3.派生类的对象对它的基类成员中(A)是可以访问的。
(1分)
A.公有继承的公有成员
B.公有继承的私有成员
C.公有继承的保护成员
D.私有继承的公有成员类
4.下列运算符中,不能被重载的是(B)(1分)
A.[]
B..
C.()
D./
5.用关键字(A)标记的函数被称为虚函数。
(1分)
A.virtual
B.private
C.public
D.protected
6.多重继承是(B)(1分)
A.多个单继承的叠加
B.派生类有多个直接基类
C.多个派生类有唯一的基类
D.每个派生类最多只有一个直接基类,但它可以有多个间接基类
7.C++语言建立类族是通过(B)。
(1分)
A.类的嵌套
B.类的继承
C.虚函数
D.抽象类
二多选题(共4题,总分值8分,下列选项中至少有2个或2个以上选项符合题目要求,请在答题卡上正确填涂。
)
8.下面描述中,(BD)是正确的。
(2分)
A.虚函数是没有实现的函数
B.纯虚函数的实现是在派生类中定义
C.抽象类是只有纯虚函数的类
D.抽象类指针可以指向不同的派生类
9.作用域运算符通常用来(AD)。
(2分)
A.指定特定的类
B.指明从哪一个基类中导出来的
C.在某些成员函数中限定静态变量的可视范围
D.解决二义性
10.继承的优点是(ABC)。
(2分)
A.扩大类的使用范围,更便于使用类库
B.避免重写程序代码,提供有用的概念框架
C.把类组织成有条理的转化层次结构
D.通用继承的自然选择和重写使类进一步拓展
11.下列函数中,可以作为虚函数的是(BD)。
(2分)
A.普通函数
B.非静态成员函数
C.构造函数
D.析构函数
三填空题(共11题,总分值22分)
12.使用虚函数保证了在通过一个基类类型的指针(含引用)调用一个虚函数时,C++系统对该调用进行_________________,但是,在通过一个对象访问一个虚函数时,使用_________________(2分)
13.如果类A继承了类B,那么类A被称为_________________类,而类B又被称为_________________类。
(2分)
14.在默认情况下的继承方式为_________________。
(2分)
15.重载“[]”函数必须且只能带_________________个形参,且规定其参数的类型为_________________赋值操作。
(2分)
16.运算符的重载实际上是
_________________的重载。
(2分)
17.C++提供了_________________机制,允许一个派生类可以继承多个基类,甚至这些基类是互不相关的。
(2分)
18.引进虚基类的目的是_________________。
(2分)
19.重载函数在编译时表现出多态性是_________________联编;而虚函数则在运行时表现出多态性是_________________联编。
(2分)
20.纯虚函数的定义是在虚函数定义的基础上,再让函数等于_________0________。
(2分)
21.成员函数重载运算符需要的参数的个数总比它的操作数_____少____一个。
(2分)
22.C++的两种联编方式为:
____静态__联编和____动态_____联编。
(2分)
四判断题(共7题,总分值14分正确的填涂“A”,错误的填涂“B”。
)
23.在构造函数和析构函数中调用虚函数时采用动态联编,即它们所调用的虚函数是在派生类中重定义的虚函数。
(2分)( B )
24.程序中可以说明抽象类的指针或引用。
(2分)( A )
25.抽象类中只能有一个纯虚函数。
(2分)( B )
26.在派生过程中,派生类吸收包括构造函数和析构函数在内的所有基类成员。
(2分)( B )
27.重载后缀“++”运算符时多给出的一个int参数,在函数体中并不被使用。
(2分)( A )
28.增加一个基类的派生类,需要对基类进行根本改变。
(2分)( B )
29.下标运算符的重载提供了在C++中实现安全的数组下标的一种方法。
(2分)( A )
五综合题(共5题,总分值35分)
30.
(1)在C++中,分数不是预先定义的,需要建立一个分数类,使之具有下述功能:
能防止分母为0,当分数不是最简形式时进行约分以及避免分母为负数。
用重载运算符完成加法、减法、乘法以及除法等四则运算。
(7分)
31.在第
(1)题的基础上,用重载关系符“==”判断两个分数是否相等。
(7分)
32.定义一个点类(Point)、矩形类(Rectangle)和立方体类(Cube)的层次结构。
矩形包括长度和宽度两个新数据成员,矩形的位置从点类继承。
立方体类由长度、宽度和高度构成。
要求各类提供支持初始化的构造函数和显示自己成员的成员函数。
编写主函数,测试这个层次结构,输出立方体类的相关信息。
(7分)
33.使用虚函数编写程序求球体和圆柱体的体积及表面积。
由于球体和圆柱体都可以看做由圆继承而来,所以可以定义圆类Circle作为基类。
在Circle类中定义一个数据成员radius和两个虚函数area()和volume()。
由Circle类派生Sphere类和Column类。
在派生类中对虚函数area()和 volume()重新定义,分别求球体和圆柱体的体积及表面积。
(7分)
34.#include<iostream>
usingnamespacestd;
classA
{
public:
A(inti,intj){a=i;b=j}//基类构造函数
voidmove(intx,inty){a+=x;b+=y;}
voiddisp()
{
cout<<"("<<a<<","<<b<<")"<<endl;
}
private:
inta,b;
};
classB:
publicA
{
public:
B(inti,intj,intk,intl):
A(i,j),x(k),y(l){}//派生类构造函数
voiddisp()
{
cout<<x<<","<<y<<endl;
}
voidfun1(){move(13,15);}
voidfun2(){A:
:
disp();}//语句8
private:
intx,y;
};
intmain()
{
Aaa(11,12);//语句1
aa.disp();//语句2
Bbb(13,14,15,16);//语句3
bb.fun1();//语句4
bb.A:
:
disp();//语句5
bb.B:
:
disp();//语句6
bb.fun2();//语句7
return0;//语句8
}(7分)
六简答题(共7题,总分值14分)
35.简述在3种继承方式下基类成员的访问权限。
(2分)
36.什么叫做多态性?
在C++中是如何实现多态的?
(2分)
37.简述派生类构造函数的规则。
(2分)
38.比较两种运算符重载形式。
(2分)
39.在面向对象技术中,类与类之间的关系如何表示?
(2分)
40.重载前缀“++”运算符与重载后缀“++”运算符在形式上有什么不同?
(2分)
41.什么叫做抽象类?
抽象类有何作用?
抽象类的派生类是否一定要给出纯虚函数的实现?
(2分)