使用初始化清單初始化受保護成員
在物件導向程式設計中,父類別可以擁有可由子類別存取的受保護成員。當初始化子物件時,可能還需要初始化在父類別中宣告的受保護成員。然而,這並不像看起來那麼簡單。
考慮以下範例:
<code class="cpp">class Parent { protected: std::string something; }; class Child : public Parent { private: Child() : something("Hello, World!") {} };</code>
在這個範例中,我們嘗試使用初始化來初始化父類別的受保護成員 some子類別的建構函式清單。但是,編譯器會報錯:類別「Child」沒有任何名為「something」的欄位。發生此錯誤的原因是受保護的成員某些內容未在子類別中聲明,因此在初始化清單中不可見。
解
初始化a 的受保護成員父類別在子類別的建構函式中,我們需要為父類別新增一個建構函式(最好是受保護的),該構造函數採用必要的參數來初始化這些成員。然後,子類別可以使用此建構函數來傳遞適當的值。
這是修改後的實作:
<code class="cpp">class Parent { protected: Parent(const std::string& something) : something(something) {} std::string something; }; class Child : public Parent { private: Child() : Parent("Hello, World!") {} };</code>
在此範例中,我們向父類別添加了一個受保護的建構函數,該構造函數採用一個字串參數並使用它來初始化受保護的成員。然後,Child 類別在其自身建構過程中使用此建構函式來初始化其父類別的受保護成員。
以上是如何在子類別的建構子中初始化父類別的受保護成員?的詳細內容。更多資訊請關注PHP中文網其他相關文章!