面向对象程序设计C++A卷答案Word文件下载.docx
《面向对象程序设计C++A卷答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计C++A卷答案Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。
D)类和对象的关系是一种数据类型与变量的关系
4、(C)不是构造函数的特征。
A)构造函数的函数名与类名相同
B)构造函数可以重载
C)构造函数不可以设置缺省参数
D)构造函数无须指定类型说明
5、友元的作用是(A
)。
A)提高程序的运用效率
B)加强类的封装性
C)实现数据的隐藏性
D)增加成员函数的种类
6、下列关于运算符重载的叙述中,正确的是(
B
A)通过运算符重载,可以定义新的运算符
B)有的运算符只能作为成员函数重载
C)若重载运算符+,则相应的运算符函数名是+
D)重载二元运算符时,必须声明两个形参
7、设置虚基类的目的是(
A)简化程序
B)消除二义性
C)提高运行效率
D)减少目标代码
8、已知在一个类体中包含如下函数原型:
Volume
operator-(Volume)const;
,下列关于这个函数的叙述中,错误的是(
A)这是运算符-的重载运算符函数
B)这个函数所重载的运算符是一个一元运算符
C)这是一个成员函数
D)这个函数不改变类的任何数据成员的值
9、关于子类型的描述中,(A
)是错误的。
A)子类型就是指派生类是基类的子类型;
B)一种类型当它至少提供了另一种类型的行为,则这种类型是另一种类型的子类型;
C)在公有继承下,派生类是基类的子类型;
D)子类型关系是不可逆的。
10、下列是模板声明的开始部分,其中正确的是(C)。
A)template<
T>
B)template<
classT1,T2>
C)template<
classT1,classT2>
D)template<
classT1;
classT2>
二、判断题(每题1分,共10分)
1、C++语言引入类主要起两个作用:
数据封装和类型定义。
√
2、只要是类M继承了类N,就可以说类M是类N的子类型。
×
3、构造函数可以声明为虚函数。
4、多继承情况下,派生类的构造函数的执行顺序取决于成员初始化列表中的顺序。
5、重载函数必须有不同的参数列表。
6、用new动态分配的内存是在堆中分配的,而不是在栈中分配的。
√
7、关系运算符可以用来比较两个字符的大小,也可用来比较两个字符串的大小。
8、如果一个成员函数只存取一个类的静态数据成员,则可将该成员函数说明为静态成员函数。
9、通过使用不同的类型参数,函数模板可以生成不同类型的函数。
10、在私有继承中,基类中只有公有成员对派生类是可见的。
三、填空题(每题2分,共20分)
1、任何类中允许有三种访问权限的数据,这三种访问权限分别是
public
、private、
protected
,默认访问权限为private(或私有)。
2、类Sample的构造函数将形参data赋值给数据成员data。
请将类定义补充完整。
class
Sample{
public:
Sample(int
data=0);
private:
int
data;
};
Sample:
:
data){
this->
data=data;
}
3、设px是指向一个类动态对象的指针变量,则执行“delete
px”语句时,将自动调用该类的析构函数。
4、当一个函数或一个类希望能够直接访问另一个类中的非公用成员时,应该将该函数或该类声名为另一个类的友元函数或友元类。
5、在MyClass
类的定义中,对赋值运算符=进行重载。
请将画线处缺失的部分补充完整。
MyClass&
MyClass:
operator=(const
MyClass
&
rhs)
{
if(this==&
return
*this;
value=rhs.value;
6、设A为test类的对象且赋有初值,则语句test
B(A);
表示用已经存在的对象A初始化正在被创建的同类新对象B
。
7、函数重载时要求同名函数的参数类型
或
个数不同,否则无法确定是哪个函数。
8、从实现的角度划分,C++所支持的两种多态性分别是编译时的多态性和运行时的多态性。
实现运行时多态,要使用
虚
函数。
9、带有
纯虚函数
的类称为抽象类,抽象类的特征是不能声明一个抽象类的
对象
,但可以声明一个抽象类的指针或引用。
10、一个
类模板
允许用户为类定义一种模式,使得类中某些数据成员、某些成员函数的参数和返回值能取任意数据类型。
四、程序阅读题(每题5分,共10分)
1、写出执行下面程序的输出结果。
9SS9S
#include<
iostream>
using
namespace
std;
A{
a;
A():
a(9){}
virtual
void
print()
const
{cout<
<
B:
public
char
b;
B(){b=
‘S’;
}
print()const
show(A&
X){X.print();
main()
A
d1,*p;
B
d2;
p=&
d1.print();
d2.print();
p->
print();
show(d1);
show(d2);
0;
2、写出执行下面程序的输出结果。
classPart{
Part(){cout<
"
classPart"
endl;
}
classA
{public:
A(char*s){cout<
s<
}
~A(){}
classB:
virtualpublicA
B(char*s1,char*s2):
A(s1)
{cout<
s2<
classC:
virtualpublicA{
C(char*s1,char*s2):
A(s1){cout<
classD:
publicC,publicB{
Partp;
D(char*s1,char*s2,char*s3,char*s4):
B(s1,s2),C(s1,s3),A(s1)
{cout<
s4<
intmain()
{
D*p=newD("
classA"
"
classB"
classC"
classD"
);
deletep;
return0;
结果:
classA
classC
classB
classPart
classD
五、程序改错题(每个错误2分,共10分)
有一个源程序文件proj.cpp,其中编号为①、②、③、④、⑤的语句有错误,请修改这些错误。
源程序文件proj.cpp清单如下:
#include<
usingnamespacestd;
cstring>
classCBook{
char*p_book;
voidCBook(constchar*p_val)-----------①去掉void
{
p_book=newchar[strlen(p_val)+1];
strcpy(p_book,p_val);
voidprint()const;
~CBook(){deletep_book[];
}-----------②去掉[]
intmain(){
charbook_title[60];
CBook*p_book_obj;
cout<
"
Enterbooktitle:
;
cin>
>
book_title;
CBookabook;
--------------③改成CBookabook(book_title);
p_book_obj=&
abook;
p_book_obj.print();
-----------④改成p_book_obj-〉print();
voidprint()const-----------⑤改成voidCBook:
{cout<
p_book<
endl;
六、程序设计题(共30分)
1、(15分)编写一个实现两个数交换的函数模板swap,然后使用该函数模板再编写一个对具有n个数组元素(通用类型)的数组采用冒泡排序算法进行排序的函数模板。
2、(15分)编写一个程序计算“三角形(triangle)、正方形(square)、圆形(circle)”三种图形的面积,要求:
(1)抽象出一个基类Base,在其中说明一个虚函数用来求面积;
(2)利用派生类定义三角形、正方形、圆形;
(3)编写主函数并测试。
1、#include<
template<
classT>
voidswap(T&
a,T&
b){
Ttemp;
temp=a;
a=b;
b=temp;
voidbubbleSort(Ta[],intn)
{inti,j;
for(i=1;
i<
n;
i++)
for(j=0;
j<
n-i;
j++)
if(a[j]>
a[j+1])swap(a[j],a[j+1]);
classT1>
voidprint(T1a[],intn){
for(inti=0;
i++)cout<
a[i]<
cout<
intmain(){
inta[]={2,3,1,6,43,22};
doubleb[]={2.3,3.2,1.6,-6.0,4.3,2.2};
print(a,6);
bubbleSort(a,6);
print(b,6);
bubbleSort(b,6);
2、class
Base
double
area(double
s=0);
Triangle:
base
D,H;
Triangle
(double
d=0,double
h=0)
D=d;
H=h;
area()
s;
s=(D*H)/2;
display()
cout<
三角形的底和高:
D<
‘’<
H<
三角形的面积:
area()<
}
Square:
L;
Square(double
l=0)
L=l;
s=L*L;
cout<
正方形的边长为:
L<
正方形的面积为:
Circle:
R;
Circle(double
r=0)
R=r;
s=3.14*R*R;
圆的半径:
R<
圆形的面积为:
Shape*p=NULL;
Trianglet(3,4,5);
Squares
(2);
Circlec(3);
t;
三角形的面积为:
c;
圆的面积为: