【发布时间】:2021-03-08 03:30:15
【问题描述】:
我有这个代码:
struct A {
virtual void f() {}
};
struct B: A {
private:
void f() override {}
};
...
B b;
A& a = b;
a.f();
当然,它会从B 调用f(),因为在编译时会检查私有,但在运行时选择虚函数版本。这种情况下可以禁止f()打电话吗?
【问题讨论】:
-
似乎是一个设计缺陷。如果您不能在
A中调用f,则它应该是私有的,或者在A中根本不存在。 -
是的。使函数成为非虚拟函数。
标签: c++ c++11 inheritance virtual private