我在面试求职的过程中,总是会遇见有关C++ 虚函数的一些题目。昨天从老徐那里弄了点资料过来,在看的过程中,感觉良好,于是将我的学习过程记录了下来,希望能够增强我的记忆,下次遇到这样的笔试题目的时候能够解答。
首先面对的是什么是虚函数?概念这些是费话,不懂的自己看书去,也可以上网搜。
简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。
虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略。
下面来看一段简单的代码:

通过
和
这两个类的的
函数,可以看出这两个类因个体的差异而采用了不同的策略,输出的结果也是我们预料中的,分别是
。但这是否真正做到了多态性呢?没有,多态还有个关键之处就是一切用指向基类的指针或引用来操作对象。现在把代码改一改,如下:
结果却是两个
。问题来了,p2明明指向的是
的对象但却是调用的
的
函数,这不是我们所期望的结果,那么解决这个问题就需要用到虚函数了。如下: