繼承具有受保護資料成員的類別時,可能需要使用子類別的初始化清單來初始化它們類別的建構函數。然而,這種方法經常會導致編譯錯誤。
在這個例子中:
<code class="cpp">class Parent { protected: std::string something; }; class Child : public Parent { private: Child() : something("Hello, World!") {} };</code>
編譯此程式碼將導致錯誤,因為子類Child 沒有名為Something 的成員.
要解決這個問題,父類別Parent 必須定義一個建構函式來初始化受保護的成員。這個建構子可以宣告為 protected,允許衍生類別存取它。
下面修改後的程式碼將成功編譯:
<code class="cpp">class Parent { protected: std::string something; Parent(const std::string& something) : something(something) {} }; class Child : public Parent { private: Child() : Parent("Hello, World!") {} };</code>
在這個修改後的程式碼中,父類別中的protected 建構函式轉發Something 成員的初始化參數,使子類別能夠在自己的初始化過程中初始化父類別的受保護成員。
透過遵循此語法,可以使用子類別的初始化清單來初始化受保護的父類別成員,提供跨繼承層次結構的物件初始化具有更大的控制力和靈活性。
以上是子類別可以透過初始化列表初始化受保護的父成員嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!