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

13

如果在派生类中将基类函数声明为非虚函数,而基类函数是虚函数,为什么在通过指针调用该函数时会触发 vtable 查找?该函数从作用域中已经很明确了。

5个回答

21
在C++中,如果您在基类中声明一个方法为 virtual ,则该方法在派生类中也是虚拟的,即使省略了 virtual 关键字。但是出于文档目的,在我看来重复还是有好处的。

5

您无法将一个函数变为非虚函数,因此它仍然是虚函数,并且对该函数的调用通常也是虚函数调用。当然,在某些情况下,编译器可以优化并进行直接调用,但显然在您的情况下不行。


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

3
对于编译器来说可能是多余的,但对于任何使用该类的人来说,这都是良好的文档。 - Martin York

1

创建虚方法以影响派生类(当您将方法标记为虚方法时,它将在派生类上使用虚表)。并且重写的方法将是虚方法。


0
当一个类继承了一个虚函数时,任何对该函数的新的、覆盖性声明都会自动成为虚函数,即使没有使用 virtual 关键字。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接