天天看点

我理解的C++虚函数

我在面试求职的过程中,总是会遇见有关C++ 虚函数的一些题目。昨天从老徐那里弄了点资料过来,在看的过程中,感觉良好,于是将我的学习过程记录了下来,希望能够增强我的记忆,下次遇到这样的笔试题目的时候能够解答。

    首先面对的是什么是虚函数?概念这些是费话,不懂的自己看书去,也可以上网搜。

    简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。

    虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略。

    下面来看一段简单的代码:

我理解的C++虚函数

    通过

我理解的C++虚函数

我理解的C++虚函数

这两个类的的

我理解的C++虚函数

函数,可以看出这两个类因个体的差异而采用了不同的策略,输出的结果也是我们预料中的,分别是

我理解的C++虚函数
我理解的C++虚函数

。但这是否真正做到了多态性呢?没有,多态还有个关键之处就是一切用指向基类的指针或引用来操作对象。现在把代码改一改,如下:

我理解的C++虚函数

结果却是两个

我理解的C++虚函数

。问题来了,p2明明指向的是

我理解的C++虚函数

的对象但却是调用的

我理解的C++虚函数

我理解的C++虚函数

函数,这不是我们所期望的结果,那么解决这个问题就需要用到虚函数了。如下:

我理解的C++虚函数

继续阅读