【问题标题】:Why are virtual functions in C++ called 'virtual'? [closed]为什么 C++ 中的虚函数称为“虚函数”? [关闭]
【发布时间】:2012-07-20 14:59:13
【问题描述】:

所以我是 C++ 中虚函数概念的新手,像 this 这样的线程很好地推销了这个概念。好的,我相信了。

但是为什么虚函数被称为“虚函数”呢?我的意思是这样的功能是“具体的” 像往常一样的功能/方法不是吗?如果有人能解释这个词的选择 'virtual' 来命名这个概念,那就太好了。

【问题讨论】:

  • @H2CO3 在任何意义上都没有超载。重载是指同名的函数接受不同的参数。
  • @rubenvb 正确——我会更新我的评论。
  • @H2CO3 太棒了!我提到它的原因是因为一个有运行时开销,而另一个没有;)
  • @rubenvb 所以我会复制我的评论作为答案:)
  • @H2CO3 oh and override是C++11中一个新的---关键字---“在特定上下文中出现时具有特殊含义的标识符”。

标签: c++ virtual


【解决方案1】:

虚拟性,即拥有某物的属性而不共享其(真实或想象的)物理形式的质量

^http://en.wikipedia.org/wiki/Virtual

C++ 虚函数看起来是一个普通函数(“具有以下属性”),但将被调用的实现不会通过声明共享,也不会通过内联实现共享。

【讨论】:

  • 感谢您的回答。您能解释一下“未通过声明分享”是什么意思吗?
  • “未通过声明共享”表示未提供信息。该声明没有提供有关函数的任何给定(虚拟)调用将调用哪个实现的信息。可以对呼叫进行限定,以使呼叫不是虚拟的,例如p->SomeClass::aMethod(),但即使在这种情况下,SomeClass' 声明 aMethod 也不会告诉您将调用哪个实现。有一个例外,即一个C++11的final方法,不能被覆盖,当时final版本也是该方法的原始引入。但这是病态的......
  • 这个关于不提供信息的声明也适用于非虚拟非内联成员函数,实际上是大多数函数。 C++ 中的虚函数专门指在对象的运行时类型上进行调度。
  • @Bryan:您的第二个陈述是正确的。因此,您的第一个陈述是不正确的。
  • 我认为您阅读的内容比实际文字中的要多。如果我声明一个在 DLL 中实现的 C 函数,那么该声明不会告诉您有关实现的任何信息;这取决于加载哪个 DLL。然而这并不涉及虚函数。
【解决方案2】:

'virtual function' 是指一个成员函数,其具体实现将取决于运行时调用它的对象的类型。该语言的编译器和运行时支持力求实现这一目标。

C++ 中的关键字“virtual”取自 Simula,这给 Bjarne Stroustrup 留下了深刻印象。更多背景信息:Pure virtual or abstract, what's in a name?

.. SIMULA 67 Common Base Language (1970) .. 似乎是第一个引入 OO 关键字作为 classobject 的语言虚拟作为一个正式的概念。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 2011-05-07
    • 2017-07-11
    相关资源
    最近更新 更多