C 中虛擬方法的概念為實現多態性和方法重寫提供了強大的機制。然而,問題出現了:為什麼要讓私有方法成為虛擬方法?
在繼承的上下文中,私有方法只能在定義它們的類別中存取。從邏輯上講,人們可能會認為使私有方法成為虛擬方法會沒有用,因為它不能被衍生類別存取或覆蓋。
但是,將私有方法宣告為虛擬方法有一個顯著的優點:
正如所解釋的Herb Sutter 是C 程式設計領域的頂尖專家,將私有方法設為虛擬,允許衍生類別覆寫該方法的實現,同時保持該方法的私有性質。這意味著派生類別可以自訂方法的行為,而無需將其暴露給外部呼叫者。
例如,考慮以下範例:
<code class="cpp">class HTMLDocument : public Document, public CachedResourceClient { private: virtual bool childAllowed(Node*); virtual PassRefPtr<Element> createElement(const AtomicString& tagName, ExceptionCode&); };</code>
這裡,childAllowed 和 createElement 都是私人的虛擬方法。 HTMLDocument 的衍生類別可以重寫這些方法以根據特定要求自訂其行為。然而,這些方法在衍生類別之外仍然無法訪問,從而保留了基類的封裝。
總而言之,將私有方法設為虛擬提供了一種強大的機制,可以在衍生類別中自訂繼承方法的實現,同時保持隱私性這些方法。這允許更大的靈活性和可擴展性,而不影響封裝原則。
以上是C 中的私有方法何時使用虛擬功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!