簡體   English   中英

C ++是否要求您從其派生類初始化基類成員?

[英]Does C++ require you to initialize base class members from its derived class?

class Base {
public:
    int a;
    Base():a(0) {}
    virtual ~Base();
}
class Derived : public Base {
public:
    int b;
    Derived():b(0) {
        Base* pBase = static_cast<Base*>(this);
        pBase->Base();
    }
    ~Derived();
}

是對基類構造函數的調用是必需的,還是c ++會自動執行此操作? 例如C ++是否要求您從任何派生類初始化基類成員?

在派生類的構造函數被調用之前,基類的構造函數將被自動調用。

您可以使用初始化列表顯式指定要調用的基本構造函數(如果有多個):

class Base {
  public:
    int a;
    Base():a(0) {}
    Base(int a):a(a) {}
};
class Derived {
  public:
    int b;
    Derived():Base(),b(0) {}
    Derived(int a):Base(a),b(0) {}
};

基類構造函數會自動調用(並在派生類構造函數之前)。 因此,您不必也不必嘗試手動調用基本構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM