首頁 > 後端開發 > C++ > 基底類別的成員變數應該如何在衍生類別的建構子中初始化?

基底類別的成員變數應該如何在衍生類別的建構子中初始化?

Susan Sarandon
發布: 2024-12-05 04:20:10
原創
465 人瀏覽過

How Should Base Class Member Variables Be Initialized in Derived Class Constructors?

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

在物件導向程式設計中,繼承允許衍生類別繼承其屬性和行為基類。然而,在衍生類別建構函數中初始化基底類別成員變數有時會帶來挑戰。

為什麼基類成員變數不能在衍生類別建構子中初始化?

考慮以下範例:

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 類別可以直接初始化這些變數。

初始化最佳實踐

為了解決這個問題,有一些建議的方法:

  • 建立基底成員public : 一種方法是將基類成員變數設為public,如下所示:
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中文網其他相關文章!

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