首頁 >後端開發 >C++ >受保護的父類別成員可以透過子類別的初始化列表進行初始化嗎?

受保護的父類別成員可以透過子類別的初始化列表進行初始化嗎?

DDD
DDD原創
2024-10-25 06:07:02832瀏覽

Can Protected Parent Class Members Be Initialized via Child Class's Initialization List?

在子類別的初始化清單中初始化父類別的受保護資料成員

在物件導向程式設計中,衍生類別可以繼承基類別的功能。經常出現的一個問題是是否可以使用子類別建構函式的初始化列表來初始化父類別的受保護資料成員。

考慮以下程式碼範例:

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

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

當嘗試編譯此程式碼時,編譯器會拋出錯誤,指出「Child」類別不包含名為「something」的資料成員。這是因為初始化列表只允許初始化子類別本身內的資料成員。

要實現所需的功能,需要向父類別添加一個建構函數,該構造函數接受所需的初始值並將其轉發到基類的資料成員。例如:

<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」類別的建構子會初始化「something」受保護資料成員。因此,子類別從其父類別繼承了初始化的“something”資料成員。

以上是受保護的父類別成員可以透過子類別的初始化列表進行初始化嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn