虚函数是实现运行时多态性的基础,它使用virtual关键字,其定义形式为:
virtual <类型> <函数名> (<参数表>)
虚函数在不同的派生类中可能存在不同的实现,通过重载基类的虚函数,可以生成该函数在派生类中的专门版本,如果派生类中没有重载该虚函数,则使用基类的函数版本。
在C++中,虚函数可以是友元函数,但不能是静态成员。虚函数的重定义函数,无论是否使用virtual关键字,仍然是虚函数。
警钟长鸣:虚函数和虚基类没有必然联系。
例13.1.4 下列关于虚函数的描述中,正确的是( )。[2005年4月 选择第13题]
A.虚函数是一个static类型的成员函数
B.虚函数是一个非成员函数
C.基类中采用virtual说明一个虚函数后,派生类中定义相同原型的函数时可不必加virtual说明
D.派生类中的虚函数与基类中相同原型的虚函数具有不同的参数个数或类型
答案:C
13.1.3 考点3:纯虚函数与抽象类
纯虚函数是一种特别的虚函数,它没有函数的实现体部分,也没有为函数的功能提供实现的代码,它的实现版本必须由派生类给出,因此纯虚函数不能是内联函数。
纯虚函数的定义形式为:
virtual <类型> <函数名> (<参数表>) = 0;
拥有纯虚函数的类就是抽象类,抽象类不能产生类的实例。如果纯虚函数没有被重载,则派生类将继承此纯虚函数,即该派生类也是抽象类。
警钟长鸣:(1)具有纯虚函数的抽象类与虚基类没有必然联系。
(2)抽象类不能产生实例,而虚基类所对应的类本身却可以产生实例。
例13.1.5 在一个类体的下列声明中,正确的纯虚函数声明是( )。[2004年9月 选择第28题]
A.virtual void vf() = 0; B.void vf(int)=0;
C.virtual int vf(int); C.virtual void vf(int) {}
答案:A
本章节内容来自希赛全国计算机等级考试用书《计算机等级考试考点分析、题解与模拟——二级C++语言》。(购书请见 :http://shop.csai.cn/itbook/itbookinfo.asp?lbbh=10032460)
[1] [2]