关于virtual的理解
- C++课程学习后,觉得这个概念非常难以理解;
- 经过n年的C++开发经验后,开始了解virtual和函数重载结合后的威力,理解的高度上升为:
“基类中可以调用子类中重定义的由基类声明为virtual的函数”,没有virtual,我们无法做到这一点。
这个理解没有错,可是如果没有深入的认识,只能和我们说“OO?就是Encapsulation,Inheritance,Polymorphism”一样的正确却无用……
在MFC中发现了许多使用virtual的例子,包括和消息映射函数的结合。可能有很多MFC的初学者没有认真的考虑过一个简单又有趣的问题,CDialog的派生类中OnOK()函数和virtual的关系,这是下面的一个帖子。 - 面试时被询问到使用virtual修饰基类,即
class CDerived: virtual public CBase{
……
};
的意义,只好老实的回答不知道,痛苦啊!回来后立刻到MSDN中查找,终于明白了,唉。
以后的帖子准备翻译MSDN中关于virtual base class的文章,如果是使用.net的朋友,可以在帮助的索引中输入
virtual base classes, overview
阅读英文原文。 - 重载和重定义的区别和合作,这是以后的帖子啦;
- 设计模式中virtual的重要地位。在《设计模式:可复用面向对象软件的基础》一书中,介绍的类和对象组合的方法,virtual的使用在其中起到了至关重要的作用。