首頁 >後端開發 >C++ >什麼時候可以使用子類別建構函式的初始化列表來初始化受保護的資料成員?

什麼時候可以使用子類別建構函式的初始化列表來初始化受保護的資料成員?

Linda Hamilton
Linda Hamilton原創
2024-10-24 13:59:02734瀏覽

When Can the Initialization List of a Child Class Constructor Be Used to Initialize Protected Data Members?

初始化清單和受保護成員初始化

在使用C 的物件導向程式設計中,類別繼承父類別是常見的做法並擴展它們的功能。然而,出現了一個問題:子類別建構子的初始化列表可以用來初始化在父類別中宣告為 protected 的資料成員嗎?

為了實現這一點,可能會有類似於以下的程式碼以下:

<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 類別中加入了一個受保護的建構函數,並且它接受一個字串參數。然後,子類別的建構函數使用建構函數轉送呼叫父類別的受保護建構函數,以傳遞必要的參數並初始化某些資料成員。

以上是什麼時候可以使用子類別建構函式的初始化列表來初始化受保護的資料成員?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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