簡體   English   中英

在C ++中繼承的構造函數

[英]constructors inherited in c++

從這里摘錄:

構造函數與其他類方法的不同之處在於它們創建新對象,而其他方法則由現有對象調用。 這是構造函數不被繼承的原因之一。 繼承意味着派生的對象可以使用基類方法,但是對於構造函數,該對象直到構造函數完成工作后才存在。

  1. 構造函數是否創建新對象,或者在調用對象時立即調用該構造函數?

  2. 據說構造函數和析構函數不是從基類繼承到派生類,而是程序處於矛盾之下,我們正在創建派生類的對象,但它也輸出基類的構造函數和析構函數?


class A{
public:
    A(){
        cout<< Const A called<<endl;
    }
    ~A(){
        cout<< Dest A called <<endl;
    }
};

Class B : public A{
public:
    B(){
        cout<< Const B called <<endl;
    }
    ~B(){
        cout<< Dest B called <<endl;
    }
};

int main(){
    B obj;
    return 0;
}

輸出:

const A被稱為

const B叫

目的地B叫

目的地A被稱為

從某種意義上說,派生類D不會從B繼承構造函數,因為不指定任何顯式D構造函數,我可以使用B(int)來構造new D(1);

但是,我可以做的是在派生類構造函數的定義中使用基類構造函數,例如D::D(void) : B(1) {}

不太抽象的是,假設我有一個使用gender參數的Person構造函數,我可能希望創建一個:

class Son: Person{
public:
    Son(void) : Person(male) {};
};

構造一個Son ,顯然是一個Person ,但是當然不需要參數gender

析構函數在意義上的“繼承”上的閉括號D::~D(){}到呼叫~B()是隱含的。

暫無
暫無

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

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