衍生類別建構子中基類成員變數的初始化
在物件導向程式設計中,繼承允許衍生類別繼承其屬性和行為基類。然而,在衍生類別建構函數中初始化基底類別成員變數有時會帶來挑戰。
為什麼基類成員變數不能在衍生類別建構子中初始化?
考慮以下範例:
class A { public: int a, b; }; class B : public A { B() : A(), a(0), b(0) { } };
在此程式碼中,類別B 嘗試初始化基類成員變數a 和b 在自己的建構函式中,使用語法:A ()、a(0)、b(0)。然而,這種做法是不正確的。原因是 a 和 b 不是 B 類的成員,而是 A 類的成員。只有 A 類別可以直接初始化這些變數。
初始化最佳實踐
為了解決這個問題,有一些建議的方法:
class A { public: int a, b; }; class B : public A { B() : a(0), b(0) { } };
但是,不建議將成員變數設為 public,因為它違反了以下原則:封裝性和安全性。
class A { protected: A(int a, int b) : a(a), b(b) {} // Accessible to derived classes private: int a, b; // Keep these variables private in A }; class B : public A { public: B() : A(0, 0) // Calls A's constructor, initializing a and b in A to 0. { } };
此方法使衍生類別能夠透過使用所需初始值呼叫基底類別建構子來初始化基底類別成員變數。
以上是基底類別的成員變數應該如何在衍生類別的建構子中初始化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!