11多态性与虚函数doc.docx
《11多态性与虚函数doc.docx》由会员分享,可在线阅读,更多相关《11多态性与虚函数doc.docx(14页珍藏版)》请在冰豆网上搜索。
11多态性与虚函数doc
□•多态性与虚函数
关于纯虚函数,下列表述中正确的是()0
A•纯函数是没有给出实现版本(即无函数体定义)的虚函数
B.纯虚函数的声明总是以性0“结束
C.派牛类必须实现基类的纯虚函数
D.含有纯虚函数的类不可能是派生类
B
在派生类屮定义虚函数时,可与基类屮和应的虚函数不同的是
A.参数类型
B.参数个数
C.函数名称
D.函数体
D
关于抽象基类,以下哪种说法是正确的()。
A.-个抽象基类只能包含一个纯虚函数
B.在类的层次结构中,抽象基类只能位于顶层
c.派生类不能调用抽象基类的纯虚函数,但是抽象基类n己可以调用
D.抽象基类是本类族的公共接口
D
卜•面4个选项中,()是用来声明虚函数的。
A.virtual
B.public
C.using
D.false
A
下列描述中,()是抽象类的特性。
A.可以定义成员函数
B.可以进行构造函数重载
C.可以定义友元函数
D.不能定义对象
D
O是面向对象程序设计的一个重要特性。
A.多态性
B.预处理
C.函数
D.常变量
A
如果一个类至少有一个纯虚函数,那么就称该类为()。
A.抽彖类
B.虚函数
C.派生类
D.其他都不对
A
C++类体系中,不能被派生类继承的冇()。
A.构造函数
B.虚函数
C.静态成员函数
D.赋值操作函数
A
下列虚基类的声明中,正确的是()。
A.classvirtualB:
publicA
B.virtualclassB:
publicA
C.classB:
publicAvirtual
D.classB:
virtualpublicA
D
下列函数中,可以被定义为虚函数的是()。
A•类的静态成员函数
B.类的构造函数
C.非类的函数
D.类的非静态成员函数
D
关于虚函数的描述屮,()是正确的。
A.虚函数是一个静态成员函数
B.虚函数是一个非成员函数
C.虚函数既町以在函数说明吋定义,也可以在函数实现时定义
D.派牛•类的虚函数与基类中対应的虚函数具有相同的参数个数和类型
D
下而关于虚函数和函数重载的叙述不正确的是()。
A.虚函数不是类的成员函数
B.虚函数实现了C++的多态性
C.函数重载允许非成员函数重载,而虚函数则不行
D.函数重载的调用根据参数的个数、序列来确定,而虚函数依据对彖确定
A
下列虚基类的声明中,正确的是()。
A.classvirtualB:
publicA
B.virtualclassB:
publicA
C.classB:
publicAvirtual
D.classB:
virtualpublicA
D
下面正确的说法是o
A.关键字virtual只能用來声明虚函数
B.声明虚函数时,才使用关键字virtual
C.关键字virtual不能川來声明虚棊类
D.关键字virtual能用来声明虚基类
D
实现运行时的多态性耍使用()。
A.虚函数
B•重载函数
C.析构函数
D.构造函数
A
()是一个在基类中说叨的虚函数,它在该基类中没有定义,但要求任何派生类都必须定义自己的版木。
A.纯虚函数
B.虚析构函数
C.虚构造函数
D.静态成员函数
A
下列描述中,属于抽象类的性质是。
A.可以说明虚函数
B.可以进行构造函数重载
C.可以定义友元函数
D•不能说明其对象
D
卜•列关于抽象类的说明屮不正确的是()o
A.含有纯虚函数的类称为抽象类
B.抽象类不能被实例化,但可声明抽象类的指针变量
C.抽象类的派生类可以实例化
D.纯虚函数可以被继承
C
下列特征小不是而向对象方法的主要特征的是()o
A.多态性
B.继承
C.封装性
D.模块化
D
填空题
有如下类定义
classA
{
public:
virtualintvf(int)二0;
};
则类A为类。
第1空:
抽象
编译时多态性通过和模板來实现
第1空:
重载
有如下类定义:
classA
{
public:
virtualintvf(int)=O;
};
则成员函数vf为函数。
第1空:
纯虚
如果在类屮定义了一个成员函数为则表明在该继承层次链条的派牛类中有可能重新
定义这个成员函数的实现。
第1空:
虚函数
虚函数的作用就是通过基类去调用它所指的派牛类对象中的成员函数。
第1空:
指针
抽象类的主要作用是为一个族类提供统一的O
第1空:
公共接口
声明虚函数时,被“初始化”为0的函数被称作函数。
第1空:
纯虚
有如F类定义:
classA
{
public:
virtualintvf(int){};
};
则成员函数Vf为函数。
第1空:
虚
虚函数从表现形式看是指那些被关键字修饰的成员函数。
第1空:
virtual
多态性分为编译时多态性和多态性。
第1空:
运行时
抽象类中至少要有一个函数。
第1空:
纯虚
函数重载可以实现时多态性。
第1空:
编译
含冇纯虚函数的类称为O
第1空:
抽象类
拥有纯虚函数的类是抽彖类,纯虚函数的声明以“结束。
第1空:
=0
有如下类定义:
classB
{
public:
virtualvoidfl();
virtualvoidf2();
};
classD:
publicB
{
public:
voidfl();
voidf2(intx);
};
则派生类D的成员函数fl()和f2()屮,虚函数为o
第1空:
fl
编译时多态性也称为多态性。
第1空:
静态
在C++屮,只能将类的函数声明为虚函数,不能将类外的普通函数声明为虚函数。
第1空:
成员
在C++屮,空虚函数的函数体是的,纯虚函数无函数体。
第1空:
空
多态性乂称为动态多态性。
第1空:
运行时
拥有纯虚函数的类是抽象类,抽象类不能用來定义O
第1空:
对象
类无法创建对象实例。
第1空:
抽象
派生类的虚函数与基类屮对应的熄函数具有的参数个数和类型。
笫1空:
相同
要实现派生类对象的动态绑定,需要将基类中的某个成员函数定义为<
第1空:
虚函数
在以卞语句的横线处填入适当的内容,以便在类中定义成员函数vf为虚函数。
intvf(int){};
第1空:
virtual
判断
多态性只能在编译的时候实现。
错课
抽象类也可以建立对象。
错误
虚函数只能川于类的继承层次结构屮。
正确
任何函数都能被芮明为虚函数。
错误
多态性只能通过重载来实现。
错误
抽象类的主要作用是为一个族类提供统一的公共接口。
正确
抽彖类包含纯虚函数。
正确纯虚隊I数也町以有两数休。
错误请写出下题的运行结果:
#inelude
usingnamespacestd;
classPoint
{public:
Point(){}
virtual~Point(){coutvv"executingPointdestructor"«endl;}
};
classCircle:
publicPoint
{public:
Circle(){}
^Circle(){cout«HexecutingCircledestructorH«endl;}
private:
intradus;
};
intmain()
{Point*p=newCircle;
deletep;
return0;
}
executingCircledestructor
executingPointdestructor
请写出下题的运行结果:
#include
#inelude
usingnamespacestd;
classStudent
{public:
Student(int,string,float);
virtualvoiddisplay));
protected:
intnum;
stringname;
floatscore;
};
Student:
:
Student(intn,stringnam,floats)
{num二n;name二nam;score=s;}
voidStudent:
:
display()
{cout«tlnum:
lH<f«score«HclassGraduate:
publicStudent
{public:
Graduate(int,string,float,float);
voiddisplay();
private:
floatpay;
};
voidGraduate:
:
display()
{cout«Hnum:
HH,«score«Hpay=H«pay«endl;}
Graduate:
:
Graduate(intn,stringnam,floats,floatp):
Student(n,nam/s),pay(p){}
intmain()
{Studentstudl(1001,”Li”,87.5);
Graduategradl(2001;'Wang,,/98.5z1200);
Student*pt=&studl;
pt=&gradl;
pt->display();
return0;
}
num:
2001
name:
Wang
score:
98.5
pay=1200
请写出下题的运行结果:
#inelude
usingnamespacestd;
classB
{
public:
voidprint(){cout«"B";}
};
classD:
publicB
{
public:
voidprint(){cout«"D";}
};
voidmain()
{
D*pd=newD();
B*pb=pd;
pb->print();
pd->print();
deletepd;
}
BD
请写出下题的运行结果:
#includeviostream>
usingnamespacestd;
classT1
{
public:
voidfunl(){cout«"Tl}
virtualvoidfun2(){cout«"Tl}
};
classT2:
publicT1
{
public:
voidfunl(){cout«HT2n;}
voidfun2(){cout«nT2“;}
};
voidf(Tl&b)
{
b.funl();
b.fun2();
}
voidmain()
{
T2obj;
f(obj);
}
T1T2
请写出下题的运行结果:
#include
usingnamespacestd;
classTestClass
{
public:
virtualvoidfunl(){cout«,,funlTestClass,,«endl;}virtualvoidfun2(){cout«,,fun2TestClass,,«endl;}};
classTestClassl:
publicTestclass
{
voidfunl(){cout«"funlTestClasslH«endl;}
voidfun2(intx){cout«,,fun2TestClassl,,«endl;}};
intmain()
Testclassobjl,*p;
TestClasslobj2;p=&obj2;
p->funl();
p->fun2();
return0;
}funlTestClassl
fun2TestClass
请写出下题的运行结果:
#includeusingnamespacestd;classApublic:
virtualvoidf(){cout«l;}
voidg(){cout«2;}
};
classB:
publicA
{
public:
virtualvoidf(){cout«3;}
voidg(){cout«4;}
};
voidshow(A&a)
{
a.f();
a.g();
}
intmain()
{
Bb;
show(b);
return0;
}
32
请写出下题的运行结果:
#include
usingnamespacestd;
classPublication〃出版物类
{
public:
Publicationfchar*name="未知名称”){strcpy(this->name,name);}
charname[30];
constchar*getName()const{returnname;}
virtualconstchar*getType()const{return11未矢口类型'*;}private:
};
classBook:
publicPublication//卩类
{
public:
Book(char*name):
Publication(name){}
virtualconstchar*getType()const{returnHIJ'1;}
};
voidshowPublication(Publication&p)
{cout«p.getType()«,,:
H«p.getName()«endl;}
intmain()
{
Bookbook(”精彩人生”);
showPublication(book);
return0;
}
书:
精彩人生