如果在基类函数是虚拟的时候在派生类中将函数声明为非虚函数,为什么它在调用指针函数时调用vtable查找?该功能在范围内很清楚。
答案 0 :(得分:21)
在C ++中,如果在基类中声明方法virtual
,那么即使省略virtual
关键字,它也在派生类中也是虚拟的。
出于文档目的,我认为无论如何都要重复它。
答案 1 :(得分:5)
您无法使某个功能成为非虚拟功能,因此它将保持虚拟状态,并且对该功能的调用通常也是虚拟的。当然,在某些情况下,编译器将能够对此进行优化并进行直接调用,但显然不在您的场景中。
答案 2 :(得分:2)
该函数仍然是虚拟的(假设它具有相同或协变的签名)。覆盖时使用virtual
是多余的。
答案 3 :(得分:1)
创建影响派生类的虚拟方法(当您将方法标记为虚拟时。它将在派生类上使用vtable)。覆盖的方法将是虚拟的。
答案 4 :(得分:0)
当一个类继承虚函数时,即使未使用virtual
关键字,该函数的任何新的重写声明都将自动变为虚拟。