衍生類別建構子中基類成員變數的初始化
在處理類別繼承時,會出現一個常見問題:如何初始化基類別派生類別建構函數中的成員變數。最初嘗試這樣做可能會導致混亂,如下所示:
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中文網其他相關文章!