我理解的C++虚函数
2013-03-02 21:42
239 查看
我在面试求职的过程中,总是会遇见有关C++ 虚函数的一些题目。昨天从老徐那里弄了点资料过来,在看的过程中,感觉良好,于是将我的学习过程记录了下来,希望能够增强我的记忆,下次遇到这样的笔试题目的时候能够解答。
首先面对的是什么是虚函数?概念这些是费话,不懂的自己看书去,也可以上网搜。
简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。
虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略。
下面来看一段简单的代码:
通过
和
这两个类的的
函数,可以看出这两个类因个体的差异而采用了不同的策略,输出的结果也是我们预料中的,分别是
和
。但这是否真正做到了多态性呢?没有,多态还有个关键之处就是一切用指向基类的指针或引用来操作对象。现在把代码改一改,如下:
结果却是两个
。问题来了,p2明明指向的是
的对象但却是调用的
的
函数,这不是我们所期望的结果,那么解决这个问题就需要用到虚函数了。如下:
显然
的成员函数
已经成了虚函数,那么
的
成了虚函数了吗?回答是Yes,我们只需在把基类的成员函数设为virtual,其派生类的相应的函数也会自动变为虚函数。所以,
的
也成了虚函数。那么对于在派生类的相应函数前是否需要用virtual关键字修饰,那就是你自己的问题了。
我的总结是,指向基类的指针在操作它的多态类对象时,会根据不同的类对象,调用其相应的虚函数。
首先面对的是什么是虚函数?概念这些是费话,不懂的自己看书去,也可以上网搜。
简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。
虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略。
下面来看一段简单的代码:
通过
和
这两个类的的
函数,可以看出这两个类因个体的差异而采用了不同的策略,输出的结果也是我们预料中的,分别是
和
。但这是否真正做到了多态性呢?没有,多态还有个关键之处就是一切用指向基类的指针或引用来操作对象。现在把代码改一改,如下:
结果却是两个
。问题来了,p2明明指向的是
的对象但却是调用的
的
函数,这不是我们所期望的结果,那么解决这个问题就需要用到虚函数了。如下:
显然
的成员函数
已经成了虚函数,那么
的
成了虚函数了吗?回答是Yes,我们只需在把基类的成员函数设为virtual,其派生类的相应的函数也会自动变为虚函数。所以,
的
也成了虚函数。那么对于在派生类的相应函数前是否需要用virtual关键字修饰,那就是你自己的问题了。
我的总结是,指向基类的指针在操作它的多态类对象时,会根据不同的类对象,调用其相应的虚函数。
相关文章推荐
- C++虚函数的理解和举例
- C++虚函数与函数重载理解分析
- C++虚函数的深入理解
- C++虚函数---我的理解
- C++虚函数理解简介
- c++虚函数和纯虚函数通俗理解
- 对C++虚函数、虚函数表的简单理解
- c++虚函数理解
- C++虚函数理解(二)
- c++虚函数小理解
- 理解SOAP的好文章
- 重构 - 理解设计模式的捷径(5 设计模式的思想)
- 理解New/Delete和Malloc/Free操作符
- 依赖属性的理解
- 深入理解计算机系统
- iOS委托的理解
- 理解 JVM 如何使用 Windows 和 Linux 上的本机内存
- SQL Server执行计划的理解
- java笔记--局部内部类认识与理解
- java 内存泄露的理解与解决