是否有任何理由使重写的 C++ 虚函数的权限与基类不同?这样做有危险吗?
例如:
class base {
public:
virtual int foo(double) = 0;
}
class child : public base {
private:
virtual int foo(double);
}
The C++ faq说这是一个坏主意,但没有说明原因。
我在一些代码中看到了这种习惯用法,并且我相信作者试图将类设为最终类,基于不可能重写私有成员函数的假设。然而,本文显示了重写私有函数的示例。当然C++ 常见问题解答的另一部分建议不要这样做。
我的具体问题:
在派生类与基类中对虚拟方法使用不同的权限是否存在任何技术问题?
这样做有什么正当理由吗?
你确实得到了令人惊讶的结果,如果你有一个孩子,你不能调用 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
我想您也许可以设计一个示例,在该示例中您不希望公开函数,除非您将其视为基类的实例。但这种情况的出现本身就表明在某个地方存在着糟糕的面向对象设计,可能应该进行重构。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)