由于方法的静态绑定的 C++ 特性,这会影响多态调用。
来自维基百科:
尽管这种分派机制涉及的开销很低,但对于该语言旨在针对的某些应用程序领域来说,它可能仍然很重要。出于这个原因,C++ 的设计者 Bjarne Stroustrup 选择将动态调度设为可选且非默认。只有使用 virtual 关键字声明的函数才会根据对象的运行时类型进行调度;其他函数将根据对象的静态类型进行调度。
所以代码:
Polygon* p = new Triangle;
p->area();
如果这area()
是Child 类中的non-virtual
Parent 类中的函数,overridden
则上面的代码将调用Parent's class method
开发人员可能不期望的函数。(感谢我介绍的静态绑定)
那么,如果我想编写一个供其他人使用的类(例如库),我是否应该让我的所有函数都是虚拟的,以便前面的代码能够按预期运行?