首頁 > 後端開發 > C++ > 主體

可以使用子初始化清單來初始化受保護的父成員嗎?

Barbara Streisand
發布: 2024-10-24 19:15:02
原創
633 人瀏覽過

Can Protected Parent Members be Initialized Using Child's Initialization List?

使用子類別的初始化清單初始化受保護的父類成員

在物件導向程式設計中,您可能需要初始化在父類中聲明的受保護成員來自子類別的建構子。這是一個常見的場景,但問題出現了:可以使用子類別的初始化列表來實現嗎?

讓我們考慮以下範例:

<code class="cpp">class Parent {
protected:
    std::string something;
};

class Child : public Parent {
private:
    Child() : something("Hello, World!") {}
};</code>
登入後複製

當嘗試編譯此程式碼時,編譯器會報告錯誤:「類別『Child』沒有任何名為『something』的欄位」。這個錯誤表示編譯器無法在Child類別中找到something成員。

這裡的問題在於子類別的初始化清單(:something("Hello, World!"))無法存取protected父類別的成員。這是因為初始化清單初始化了子類別本身的私有成員,而父類別的受保護成員無法從子類別的私有部分存取。

解決方案:轉發建構子

要解決這個問題,您可以在父類別中使用轉送建構函式將初始化值傳遞給受保護的成員:

<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>
登入後複製

透過這個方法,子類別的建構子呼叫父類別的建構子透過Parent("Hello, World!") 語法。此初始化將 Something 參數傳遞給父類別的建構函數,然後初始化受保護的 Something 成員。

以上是可以使用子初始化清單來初始化受保護的父成員嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!