C++中的虚函数

来源:互联网 发布:宽带连接未识别的网络 编辑:程序博客网 时间:2024/05/07 00:48

定义:在类的非静态成员函数前加virtual,这一函数就变成了虚函数。当从父类继承时,虚函数和被继承的函数具有相同的名字,在运行过程中,系统会根据对象的类型,自动的选择与之相适应的虚函数,这一方式大多是通过指针进行实现的。

#include "stdafx.h"class CDisplayDecimal{public:CDisplayDecimal(int i){ Number = i; }CDisplayDecimal(){ Number = 0; };virtual void DisplayFormat(){printf("The Decimal value is %d\n", Number);}protected:int Number;};class CDispOctal :public CDisplayDecimal{public:CDispOctal(int i){ Number = i; }CDispOctal(){ Number = 0; }virtual void DisplayFormat(){printf("The Octal value is %o\n", Number);}};class CDispHexadecimal :public CDisplayDecimal{public:CDispHexadecimal(int i){ Number = i; }CDispHexadecimal(){ Number = 0; }virtual void DisplayFormat(){printf("The Hexadecimal value is %x\n", Number);}};void DisplayNumber(CDisplayDecimal* Dispaly){Dispaly->DisplayFormat();}int _tmain(int argc, _TCHAR* argv[]){CDisplayDecimal dec(100);CDispHexadecimal hex(100);CDispOctal oct(100);DisplayNumber(&dec);DisplayNumber(&hex);DisplayNumber(&oct);return 0;}
在本例中,利用虚函数进行数制的转换。

我们可以看到在通用函数void DisplayNumber(CDisplayDecimal* Dispaly){...}中

我们定义的指针类型是CDisplayDecimal,就是基类的指针类型,而我们传入的参数是子类的指针

运行结果为:

用指向基类的指针变量输出了所有的结果。


说明:本来,基类的指针是指向基类的对象的,如果用来指向派生类的对象,则进行指针类型转换,将派生类的指针转化为基类的指针,所以基类的指针指向的是派生类中基类部分。本来无法通过基类指针去调用派生类对象中的成员函数,虚函数突破了这一限制,在派生类的基类部分中,派生类的虚函数取代了基类中的虚函数,因此,基类指针指向派生类对象后,调用虚函数时就调用了派生类的虚函数。


0 0
原创粉丝点击