在派生类中声明为非虚拟的虚拟函数

virtual function declared non-virtual in a derived class

本文关键字:虚拟 函数 声明 派生      更新时间:2023-10-16

如果一个函数在派生类中被声明为非虚拟的,而基类函数是虚拟的,为什么它在调用指针上的函数时会调用vtable查找?功能从范围上看是清楚的。

在C++中,如果在基类中声明方法virtual,则即使省略了virtual关键字,它在派生类中也是虚拟的。

然而,出于文档的目的,我认为无论如何都可以重复一遍。

不能使函数成为非虚拟函数,因此它将保持虚拟状态,对函数的调用通常也是虚拟的。当然,在某些情况下,编译器可以对此进行优化并进行直接调用,但在您的场景中显然不能。

函数仍然是虚拟的(假设它具有相同的或协变的签名(。重写时使用virtual是多余的。

为影响派生类而创建的虚拟方法(当您将方法标记为虚拟时。它将在派生类上使用vtable(。被高估的方法将是虚拟的。

当一个类继承了一个虚拟函数时,该函数的任何新的重写声明都将自动变为虚拟的,即使不使用virtual关键字。