Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么C++;称为';虚拟的';? 所以我对C++中的虚函数的概念是新的,线程喜欢做这个概念的销售工作。好的,我确信_C++_Virtual - Fatal编程技术网

为什么C++;称为';虚拟的';? 所以我对C++中的虚函数的概念是新的,线程喜欢做这个概念的销售工作。好的,我确信

为什么C++;称为';虚拟的';? 所以我对C++中的虚函数的概念是新的,线程喜欢做这个概念的销售工作。好的,我确信,c++,virtual,C++,Virtual,但是为什么虚拟函数被称为“虚拟的”?我的意思是这些功能是“具体的” 像往常一样的函数/方法,不是吗?如果有人能解释这个词的选择 “虚拟”命名这个概念,那将是伟大的 虚拟性,具有某事物的属性而不共享其(真实的或想象的)物理形式的性质 ^ 一个C++虚拟函数看起来是一个普通函数(“拥有”属性),但是调用的实现不会通过声明共享,“虚拟函数”是指成员函数,其中特定的实现取决于运行时调用的对象的类型。该语言的编译器和运行时支持设法实现了这一点 > C++中的“虚拟”关键字取自Simula,它给Bjarne

但是为什么虚拟函数被称为“虚拟的”?我的意思是这些功能是“具体的” 像往常一样的函数/方法,不是吗?如果有人能解释这个词的选择 “虚拟”命名这个概念,那将是伟大的

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

^


一个C++虚拟函数看起来是一个普通函数(“拥有”属性),但是调用的实现不会通过声明共享,“虚拟函数”是指成员函数,其中特定的实现取决于运行时调用的对象的类型。该语言的编译器和运行时支持设法实现了这一点

> C++中的“虚拟”关键字取自Simula,它给Bjarne Stroustrup留下了深刻的印象。这里有更多的背景:

。。SIMULA 67通用基础语言(1970)。。似乎是第一种将OO关键字作为类、对象以及虚拟作为正式概念引入的语言


@H2CO3在任何意义上都不会过载。重载是指同名函数接受不同参数的情况。@rubenvb correct--我将更新我的注释。@H2CO3好极了!。我提到它的原因是一个有运行时开销,另一个没有(
;)
@rubenvb所以我将复制我的评论作为答案:)@H2CO3 oh和
override
是C++11中的一个新的---关键字--“在特定上下文中出现时具有特殊意义的标识符”。谢谢你的回答。您能解释一下“未通过声明共享”是什么意思吗?“未通过声明共享”表示未提供信息。该声明没有提供关于函数的任何给定(虚拟)调用将调用哪个实现的信息。可以限定调用,使调用不是虚拟的,例如
p->SomeClass::aMethod()
,但即使在这种情况下,
aMethod
SomeClass
声明也不会告诉您将调用哪个实现。有一个例外,即C++11
final
方法,当
final
版本也是该方法的原始介绍时,该方法不能被重写。但这是逻辑上的……关于不提供任何信息的声明也适用于非虚拟非内联成员函数,事实上大多数函数。C++中的虚拟函数具体指的是对对象的运行时类型进行调度。@布莱恩:您的第二个语句是正确的。因此,你的第一句话是不正确的。我认为你对这句话的理解比实际的话要多。如果我声明一个在DLL中实现的C函数,那么该声明不会告诉您任何关于该实现的信息;这取决于加载了哪个DLL。然而,这并不涉及虚拟功能。