虚函数 是在基类中使用关键字 virtual 声明的函数。
在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。
我们想要的是在程序中任意点可以根据所调用的对象类型来选择调用的函数,这种操作被称为动态链接,或后期绑定。
说白了,当基类的指针指向派生类的对象时,指针指向的虚函数在实际调用时调用了派生类所覆盖的函数。
举个栗子:
这段代码打印出的结果为B,但是当把A类中的virtual去掉之后打印出的结果为A。当基类中没有 virtual 的时候,编译器在编译的时候把 p 看做 A 类的对象,调用的自然就是 A 类的方法。但是加上 virtual 之后,将 dispaly 方法变成了虚方法,这样调用的时候编译器会看调用的究竟是谁的实例化对象,这样就实现了多态的效果。也就是说,当基类的派生类中有重写过基类的虚方法的时候,使用基类的指针指向派生类的对象,调用这个方法实际上调用的会是派生类最后实现的方法。