首頁 > 後端開發 > C++ > 如何在衍生類別建構函式中正確初始化基底類別成員變數?

如何在衍生類別建構函式中正確初始化基底類別成員變數?

Barbara Streisand
發布: 2024-12-10 21:54:12
原創
261 人瀏覽過

How to Properly Initialize Base Class Member Variables in a Derived Class Constructor?

衍生類別建構子中基類成員變數的初始化

在處理類別繼承時,會出現一個常見問題:如何初始化基類別派生類別建構函數中的成員變數。最初嘗試這樣做可能會導致混亂,如下所示:

class A {
public:
    int a, b;
};

class B : public A {
    B() : A(), a(0), b(0) {
    }
};
登入後複製

此程式碼無法編譯,引發問題:為什麼我們不能在 B 中初始化 a 和 b?

原因在於a和b不是B的成員,它們屬於基類A。只有A可以初始化自己的成員變數。

一個可能的解決方案是將 a 和 b 設為 A 的公共成員,允許 B 直接賦值。但是,不建議這樣做,因為它破壞了封裝原則。

相反,更穩健的方法是在 A 中定義一個建構函數,允許衍生類別指定初始化值。這可以透過使建構函式受保護並可供子類別存取來實現:

class A {
protected:
    A(int a, int b) : a(a), b(b) {} // Accessible to derived classes
private:
    int a, b; // Keep variables private within A
};

class B : public A {
public:
    B() : A(0, 0) // Calls A's constructor, setting a and b to 0 within A
    {
    }
};
登入後複製

此解決方案確保 a 和 b 在 A 中正確初始化,確保資料完整性和封裝。

以上是如何在衍生類別建構函式中正確初始化基底類別成員變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板