C 中的虚方法概念为实现多态性和方法重写提供了强大的机制。然而,问题出现了:为什么要使私有方法成为虚拟的?
在继承的上下文中,私有方法只能在定义它们的类中访问。从逻辑上讲,人们可能会假设使私有方法成为虚拟的没有用,因为它不能被派生类访问或覆盖。
但是,将私有方法声明为有一个显着的优点virtual:
正如 C 编程领域的权威专家 Herb Sutter 所解释的,将私有方法设为 virtual 允许派生类覆盖该方法的实现,同时保持该方法的私有性质。这意味着派生类可以自定义方法的行为,而无需将其暴露给外部调用者。
例如,请考虑以下示例:
class HTMLDocument : public Document, public CachedResourceClient {
private:
virtual bool childAllowed(Node*);
virtual PassRefPtr createElement(const AtomicString& tagName, ExceptionCode&);
};
这里,childAllowed 和 createElement 都是私有虚拟方法。 HTMLDocument 的派生类可以重写这些方法以根据特定要求定制其行为。然而,这些方法在派生类之外仍然无法访问,从而保留了基类的封装。
总而言之,将私有方法设为虚拟提供了一种强大的机制,可以在派生类中自定义继承方法的实现,同时保持隐私性这些方法。这允许更大的灵活性和可扩展性,而不影响封装原则。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3