假设类 B
派生自类 A
。两者都声明 f()
。 f 受到保护。因此 f 只会在 A
和 B
中被调用。 f()
是否需要声明为虚拟的?
或者说:C
派生自 B
派生自 A
。 B
和 A
声明 protected 非虚拟 f()
。 C
和 B
中对 f()
的调用是否会解析为 B::f()
而在 A 中到 A::f()
?
在那种情况下,我们是否应该始终避免对 protected 成员使用虚拟来进行静态解析?这是自动完成的吗?谢谢!
最佳答案
只要对 f()
的调用是在从 A
派生的函数中完成的(而不是在 B
中重载/重新实现或C
),this
指针解析为 A*
,因此调用 A::f()
。所以不,在这种情况下您仍然需要一个虚函数。
关于c++ - protected 功能不需要虚拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7386496/