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

时间:2011-10-13 15:42:13

标签: c++

如果在基类函数是虚拟的时候在派生类中将函数声明为非虚函数,为什么它在调用指针函数时调用vtable查找?该功能在范围内很清楚。

5 个答案:

答案 0 :(得分:21)

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

出于文档目的,我认为无论如何都要重复它。

答案 1 :(得分:5)

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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