衍生類別建構子中基底類別成員變數的初始化
在物件導向程式設計中,類別之間存在著繼承關係是很常見的。建構衍生類別時,必須正確初始化從其基底類別繼承的成員變數。但是,嘗試直接在衍生類別建構函式中初始化基底類別成員可能會導致錯誤。
考慮以下程式碼範例:
class A { public: int a, b; }; class B : public A { public: B() : A(), a(0), b(0) { } };
嘗試編譯此程式碼時,會導致錯誤,因為衍生類別建構子無法直接初始化基底類別的成員。這是因為衍生類別無法存取基底類別成員。
要解決此問題,您應該在基底類別中建立一個建構函數,允許衍生類別初始化繼承的成員。下面修改後的程式碼說明了這個方法:
class A { protected: A(int a, int b) : a(a), b(b) {} private: int a, b; }; class B : public A { public: B() : A(0, 0) { } };
現在,衍生類別 B 可以透過呼叫基底類別 A 的建構子來初始化繼承的成員 a 和 b。透過將 A 中的建構子宣告為 protected,它可以被衍生類別訪問,但不能被繼承層次結構以外的其他類別存取。或者,您可以將 A 建構函數宣告為公用以允許外部實例化。
透過使用此方法,您可以確保繼承成員的正確初始化,同時保持封裝並防止從類別外部直接存取私有變數。
以上是基底類別成員變數應該如何在衍生類別建構函式中初始化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!