在派生类中声明为非虚拟的虚拟函数
virtual function declared non-virtual in a derived class
如果一个函数在派生类中被声明为非虚拟的,而基类函数是虚拟的,为什么它在调用指针上的函数时会调用vtable查找?功能从范围上看是清楚的。
在C++中,如果在基类中声明方法virtual
,则即使省略了virtual
关键字,它在派生类中也是虚拟的。
然而,出于文档的目的,我认为无论如何都可以重复一遍。
不能使函数成为非虚拟函数,因此它将保持虚拟状态,对函数的调用通常也是虚拟的。当然,在某些情况下,编译器可以对此进行优化并进行直接调用,但在您的场景中显然不能。
函数仍然是虚拟的(假设它具有相同的或协变的签名(。重写时使用virtual
是多余的。
为影响派生类而创建的虚拟方法(当您将方法标记为虚拟时。它将在派生类上使用vtable(。被高估的方法将是虚拟的。
当一个类继承了一个虚拟函数时,该函数的任何新的重写声明都将自动变为虚拟的,即使不使用virtual
关键字。
相关文章:
- C++无法定义虚拟函数 OUTER 类和头文件
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 类型擦除的std::function与虚拟函数调用的开销
- 重写虚拟函数和继承
- 用纯虚拟函数兜圈子
- 为什么使用存储在虚拟方法表中的地址调用虚拟函数的函数会返回垃圾?
- 禁止子函数调用父级的抽象(或虚拟)函数
- 无法在子类中使用虚拟函数C++
- 无法在派生对象上运行虚拟函数
- 我可以调用从 main() 覆盖的虚拟函数吗?
- 在 C++ 中将函数获取和设置为虚拟函数
- 使用在堆栈上创建的对象调用虚拟函数
- 为什么在这种情况下不调用我的虚拟函数实现?
- 在C++中使虚拟函数私有化
- 模板继承类中的虚拟函数
- 为什么构造函数的虚拟函数调用有时有效,但其他调用却无效
- doxygenc++虚拟函数和实现
- 如何从派生类函数中调用虚拟函数