虚函数是动态联编的基础,虚函数是成员函数,且为非静态成员函数,说明方式如下:virtual< 函数类型> < 函数名>(< 参数表>)
其中,被关键词virtual说明的函数称为虚函数。这就意味着该成员函数在派生类中可能有不同的定义。当使用这个成员函数操作指针或引用所标识的对象时,将对该成员函数调用采用动态联编方式,即在运行时进行关联或绑定。
注意:在C++中动态联编只能通过指针或引用所标识的对象来操作虚函数。如果采用一般类型的标识对象来操作虚函数,则将采用静态联编方式调用虚函数。
【例5.8】用动态联编重写例5.7。
分析此程序可以看出,它与上一个程序仅在两处area()函数前加了virtual关键字,即说明了一下虚函数。该程序因为说明了虚函数,所以在fun()函数中引用对象参数p被动态联编了,在实际调用时是在运行中绑定的,调用的是Rect类的area()成员函数,所以输出是20,即4∗5。
总结一下,动态联编必须满足的条件有三个:
(1)类之间是基类与派生类关系,采用公有继承产生的派生类;
(2)基类中要有虚函数,即用virtual关键字说明;(www.daowen.com)
(3)调用虚函数的操作必须在定义时使用指向基类对象的指针或为基类对象的引用,而在调用时传入派生类对象的指针或引用派生类对象,或者由成员函数调用虚函数。
重点提示
虚函数的明对重载函数效,也就是说,派生类的函数基类中的虚函的参数不同时派生类中的函只被解释为重函数,而不具虚特性。
【例5.9】重载函数不具有虚特性。
上述程序中,因为派生类中的fun()函数与基类中的虚函数fun()参数不同,只可以被看成重载函数,所有不具有虚特性,只被解释为重载函数,不满足动态联编的条件,所以输出结果为:
class A:1
class A:1
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。