多态性和虚函数复习资料Word文档格式.docx
《多态性和虚函数复习资料Word文档格式.docx》由会员分享,可在线阅读,更多相关《多态性和虚函数复习资料Word文档格式.docx(15页珍藏版)》请在冰点文库上搜索。
A.&
&
B.[]C.:
:
D.new
5.下列关于运算符重载的描述中,正确的是()。
A.运算符重载可以改变操作数的个数
B.运算符重载可以改变操作符的优先级
C.运算符重载可以改变操作符的结合性
D.运算符重载不能改变操作符的语法结构
6.下列运算符中,不能重载的是()。
A.?
B.+C.-D.<
=
7.在C++中,通常将重载运算符的成员函数称为()。
A.运算符函数B.重载函数
C.函数重载运算符D.以上都不对
8.系统在调用重载函数时,往往根据一些条件确定哪个重载函数被调用,在下列选项中,不能作为依据的是()。
A.参数个数B.参数类型
C.函数名称D.函数的类型
9.关于动态联编的下列描述中,错误的是()。
A.动态联编是以虚函数为基础的
B.动态联编是在运行时确定所调用的函数代码
C.动态联编调用函数的标识要求是指向对象的指针或对象的引用
D.动态联编是在编译时确定操作函数的
10.关于虚函数的描述中,正确的是()。
A.虚函数是一个static类型的成员函数
B.虚函数是一个非成员函数
C.基类中说明了虚函数,派生类中将其对应的函数可不必说明为虚函数
D.派生类的虚函数与基类的虚函数具有不同的参数个数和类型
11.关于纯虚函数和抽象类的描述中,错误的是()。
A.纯虚函数是一种特殊的虚函数,它没有具体实现
B.抽象类是指具有纯虚函数的类
C.一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类
D.抽象类只能作为基类使用,其纯虚函数的实现只能由派生类给出
12.下列描述中,属于抽象类特性的是()。
A.可以说明虚函数B.可以进行构造函数重载
C.可以定义友元函数D.不能说明其对象
13.如果一个类至少有一个纯虚函数,那么就称为该为()
A.抽象类B.虚基类C.派生类D.以上都不对
14.如果一成员函数在其所在的基类中被说明为虚函数,它在该基类中没有定义,但要求在派生类中定义自己的版本,则该成员函数是()
A.虚析构函数B.虚构造函数C.纯虚函数D.静态成员函数
三.判断下列描述的正确性。
1.函数的参数个数和类型都相同,但只是返回值不同,这不是重载函数。
2.重载函数可以带有缺省值参数,但要注意调用时所产生的二义性。
3.多数运算符可以重载,个别运算符不能重载,运算符重载是通过函数定义实现的。
4.对类对象每个重载的运算符来讲,它既可以重载为友元函数,又可以重载为成员函数,还可以重载为非成员函数。
5.对单目运算符重载为友元函数时,说明一个参数;
重载为成员函数时,不能显式说明参数。
6.重载运算符保持原运算符的优先级和结合性不变。
7.虚函数是用virtual关键字说明的成员函数。
8.抽象类是指一些没有说明对象的类。
9.构造函数说明为纯虚函数是没有意义的。
10.动态联编是在运行时选定所调用的成员函数的。
四.分析下列程序的运行结果
1.程序清单如下:
#include<
iostream.h>
classB
{
public:
B(inti){b=i+50;
show();
}
B(){}
virtualvoidshow(){cout<
<
"
B:
show()called."
b<
endl;
protected:
intb;
};
classD:
publicB
D(inti):
B(i){d=i+100;
D(){}
voidshow(){cout<
D:
d<
intd;
voidmain()
Dd1(108);
}
2.程序清单如下:
B(inti){b=i;
virtualvoidvirfun(){cout<
virfun()called.\n"
;
private:
D(inti,intj):
B(i){d=j;
voidvirfun(){cout<
show()called.\n"
voidfun(B*obj)
obj->
virfun();
D*pd=newD;
fun(pd);
3.程序清单如下:
classA
A(){ver='
A'
voidprint(){cout<
TheAversion:
ver<
charver;
classD1:
publicA
D1(intnumber){info=number;
ver='
1'
TheD1info:
info<
version:
intinfo;
classD2:
D2(intnumber){info=number;
TheD2info:
classD3:
publicD1
D3(intnumber):
D1(number){info=number;
3'
TheD3info:
voidprint_info(A*p)
p->
print();
Aa1;
D1d1(4);
D2d2(100);
D3d3(-25);
print_info(&
a1);
d1);
d2);
d3);
4.程序清单如下:
virtualvoidprint(){cout<
5.程序清单如下:
classMatrix
Matrix(intr,intc)
{
row=r;
col=c;
elem=newdouble[row*col];
double&
operator()(intx,inty)
returnelem[col*(x-1)+y-1];
operator()(intx,inty)const
~Matrix(){delete[]elem;
double*elem;
introw,col;
Matrixm(5,8);
for(inti=0;
i<
5;
i++)
m(i,1)=i+5;
for(i=0;
cout<
m(i,1)<
"
cout<
6.程序清单如下:
classPoint
intx,y;
Point(intvx=0,intvy=0){x=vx;
y=vy;
Pointoperator+(Pointp1)
returnPoint(x+p1.x,y+p1.y);
Pointoperator-(Pointp1)
returnPoint(x-p1.x,y-p1.y);
x<
y<
Pointp1(10,10),p2(20,20);
p1=p1+p2;
p1.print();
7.程序清单如下:
intdys[]={31,28,31,30,31,30,31,31,30,31,30,31};
classdate
intmo,da,yr;
date(intm=0,intd=0,inty=0){mo=m;
da=d;
yr=y;
voiddisp(){cout<
mo<
'
/'
da<
yr<
dateoperator+(intday)
datedt=*this;
day+=dt.da;
while(day>
dys[dt.mo-1])
{
day-=dys[dt.mo-1];
if(++dt.mo==13)
{
dt.mo=1;
dt.yr++;
}
}
dt.da=day;
returndt;
dated1(2,10,2001),d2;
d2=d1+20;
d2.disp();
8.程序清单如下:
Point(){}
Point(intk,intm){x=k;
y=m;
面积为:
x*y<
Pointoperator,(Pointr){returnPoint(r.x,r.y);
Pointoperator+(Pointr){returnPoint(x+r.x,y+r.y);
Pointr1(3,3),r2(5,8),r3(2,4);
r1.disp();
r2.disp();
r3.disp();
r1=(r1,r2+r3,r3);
五.填空题
1.多态性是面向对象程序设计的重要特征之一,只有对多态性的支持,才能够称为面向对象的语言。
在C++中,多态性的实现技术主要有:
、和。
2.在类中,构造函数可以重载,通常的成员函数也可以重载,但不允许重载。
3.当双目运算符重载为类的成员函数时,由于成员函数含有,因此运算符函数只能有一个参数,而当其被重载为类的友元函数时,必须有个参数。
4.设obj1,obj2是某类对象,当运算符@被重载为该类的成员函数时,则obj1@obj2被解释为。
5.虚函数是动态联编的基础,要求虚函数必须是。
对虚函数的调用,采取动态联编,其调用虚函数的标识必须用、或,否则其它标识方法对虚函数的调用,仍然采取的是静态联编。
6.抽象类只能作为来使用,其纯虚函数的实现由派生类给出。
如果派生类中没有重新定义纯的虚函数,而派生类只是继承基类的纯虚函数,则这个派生类仍然是。
六.编程题
1.基于抽象类的技术,编写计算正方体、球体和圆柱体的表面积和体积的程序。
2.设计评选优秀教师和学生的程序,其类结构如图所示。
当输入一系列教师或学生的记录后,将优秀学生及教师的姓名列出来。
3.定义一个矩阵类,重载运算符+与*,以完成两矩阵的相加与相乘运算。