[英]constructors inherited in c++
構造函數與其他類方法的不同之處在於它們創建新對象,而其他方法則由現有對象調用。 這是構造函數不被繼承的原因之一。 繼承意味着派生的對象可以使用基類方法,但是對於構造函數,該對象直到構造函數完成工作后才存在。
構造函數是否創建新對象,或者在調用對象時立即調用該構造函數?
據說構造函數和析構函數不是從基類繼承到派生類,而是程序處於矛盾之下,我們正在創建派生類的對象,但它也輸出基類的構造函數和析構函數?
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.