c++ - protected 功能不需要虚拟

标签 c++ inheritance virtual

假设类 B 派生自类 A。两者都声明 f()。 f 受到保护。因此 f 只会在 AB 中被调用。 f() 是否需要声明为虚拟的?

或者说:C 派生自 B 派生自 ABA 声明 protected 非虚拟 f()CB 中对 f() 的调用是否会解析为 B::f() 而在 A 中到 A::f()?

在那种情况下,我们是否应该始终避免对 protected 成员使用虚拟来进行静态解析?这是自动完成的吗?谢谢!

最佳答案

只要对 f() 的调用是在从 A 派生的函数中完成的(而不是在 B 中重载/重新实现或C),this 指针解析为 A*,因此调用 A::f()。所以不,在这种情况下您仍然需要一个虚函数。

关于c++ - protected 功能不需要虚拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7386496/

相关文章:

vba - 如何避免向下转换为接口(interface)类?

c# - 有没有一种方法允许子类只覆盖 -some- 父类抽象方法

c++ - 从派生类创建复制构造函数和赋值运算符

c++ - C++ 概念和接口(interface)之间有什么区别?

c# - 检测游戏是否在安卓模拟器中运行

c++ - 另一个与设计相关的 C++ 问题

c++ - 从 C++ 中的空格读取文件

c++ - 使用 is 作为模板类型参数时,我可以访问类字段吗?

c++ - 理解隐式声明的默认构造函数

c++ - C++如何确定字符串中的字符