2012-07-21 73 views
6

所以我对C++中虚拟函数的概念很陌生,像this这样的线程在销售这个概念方面做得很好。好吧,我确信。为什么C++中的虚函数称为“虚拟”?

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

+0

@ H2CO3在任何意义上都没有超载。重载是指具有相同名称的函数接受不同的参数。 – rubenvb 2012-07-21 17:48:00

+0

@rubenvb正确 - 我会更新我的评论。 – 2012-07-21 17:49:01

+0

@ H2CO3太好了!我提到它的原因是因为一个运行时间开销,另一个不'')'。 – rubenvb 2012-07-21 17:51:38

回答

9

虚拟,具有什么属性而不​​共享其质量(真实或想象的)物理形式

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

A C++虚拟功能似乎是一个普通的函数(”具有“)的属性,但是将被调用的实现不通过声明共享,或者通过内联实现共享。

+0

谢谢你的回答。你能解释一下'不通过声明分享'的意思吗? – curiousexplorer 2012-07-21 17:56:24

+0

“未通过声明共享”表示未提供信息。该声明没有提供任何给定(虚拟)函数调用将调用哪个实现的信息。可以限定一个呼叫以便该呼叫不是虚拟的,例如, 'p-> SomeClass :: aMethod()',但即使在这种情况下,'aMethod'的'SomeClass'声明也不会告诉你哪个实现将被调用。有一个例外,即一个C++ 11'final'方法,当'final'版本也是该方法的原始介绍时,这个方法不能被覆盖。但这是病态的... – 2012-07-21 18:08:37

+0

关于不提供信息的声明也适用于非虚拟非内联成员函数,实际上也适用于大多数函数。 C++中的虚函数具体指的是在对象的运行时类型上进行分派。 – Bryan 2012-07-21 20:30:01

6

'虚函数'表示一个成员函数,其中具体实现将取决于它在运行时被调用的对象的类型。语言的编译器和运行时支持可以实现这一点。

C++中的关键字'虚拟'来自Simula,它给Bjarne Stroustrup留下了深刻的印象。其它更多的背景在这里:Pure virtual or abstract, what's in a name?

..的SIMULA 67公共基础语言(1970年)..似乎是引进OO关键字为类,对象,也虚拟作为第一语言一个正式的概念。