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