是否有任何理由使重写的 C++ 虚函数的权限不同于基类?这样做有什么危险吗?
例如:
class base {
public:
virtual int foo(double) = 0;
}
class child : public base {
private:
virtual int foo(double);
}
C++ faq说这是一个坏主意,但没有说明原因。
我在一些代码中看到了这个习语,我相信作者试图使这个类成为最终的,基于不可能覆盖私有(private)成员函数的假设。但是,This article显示了一个覆盖私有(private)函数的示例。当然 another part of the C++ faq建议不要这样做。
我的具体问题:
在派生类和基类中对虚拟方法使用不同的权限是否存在任何技术问题?
这样做有什么正当理由吗?
最佳答案
你确实得到了令人惊讶的结果,如果你有一个 child ,你不能调用 foo,但你可以将它转换为一个基数,然后调用 foo。
child *c = new child();
c->foo; // compile error (can't access private member)
static_cast<base *>(c)->foo(); // this is fine, but still calls the implementation in child
我想您可能可以设计一个不希望公开函数的示例,除非您将其视为基类的实例。但是,这种情况出现的事实表明,在某处可能应该重构一个糟糕的 OO 设计。
关于c++ - 在 C++ 中用私有(private)函数覆盖公共(public)虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/484592/