【发布时间】:2011-07-19 05:43:53
【问题描述】:
在评估基本 C++ 知识的面试中,被要求描述什么是虚函数似乎是最常见的问题之一。然而,经过几年的 C++ 编程,我仍然有一种不舒服的感觉,我并不真正了解如何最好地定义它们。
如果我查阅维基百科,我看到虚函数的定义是:
“在面向对象的编程中,虚函数或虚方法是一种函数或方法,其行为可以在继承类中被具有相同签名的函数覆盖”
这个定义看起来简单而优雅,而不是特定于 C++。但对我来说,它似乎没有捕捉到 C++ 中虚函数的概念,因为在继承类中,具有相同签名的函数肯定也可以覆盖非虚函数。
如果我被要求非正式地描述什么是虚函数,我会说一些指针,例如“它是一种方法,当您通过基类指针调用它时,会调用派生类中定义的它的版本相反,如果指针实际上指向派生类的实例”。这似乎不是对这个概念的非常优雅的描述。我知道人们说这就是在 C++ 中实现“多态性”的方式(据我所知,多态性大致是将对象组织成层次结构的整个想法),但我不知道有更好的方式来理解或解释机制而不是通过指针来完成示例。
我想我对虚函数的“指针”描述是否是它们定义的基本内容,还是只是它们在 C++ 中实现的附带内容感到困惑。
【问题讨论】:
-
这看起来有点主观和争论。
标签: c++ oop function polymorphism virtual