C 類的繼承中,建構函式的執行順序

2021-04-28 02:40:25 字數 698 閱讀 8234

先看下邊的程式

class a

public a(string a)

public virtual void printfields(){}

}class b:a

public override void printfields()

,y=",x,y);}}

如果執行: b b = new b("a");會輸出x=1,y=0.

因為在例項化子類b時,會先呼叫基本的無參建構函式,此時x=1而y並沒有初始化,預設值為0,所以輸出x=1,y=0,然後才執行b的建構函式,執行y=-1;

如果基類a沒有無參建構函式,需要通過base來呼叫有參的建構函式.

像這樣寫是不行的.

class a

public virtual void printfields(){}

}class b:a

public override void printfields()

,y=",x,y);}}

必須寫成這樣

class a

public virtual void printfields(){}

}class b:a

public override void printfields()

,y=",x,y);}}.

所以如果要寫乙個基類的話,最好實現乙個無參的建構函式,即使這個函式是空的.

C 中多重繼承建構函式執行順序

1 1 include 2 include 3 4using namespace std 56 classa11 12 classb17 18 class c public b,publica24 25 intmain 輸出 b ac 分析 多重繼承與單繼承類似,也是先執行基類建構函式。多個基類之間...

繼承 父類子類建構函式的執行順序

當乙個類繼承了某個類時,在子類的構造方法裡,super 必須先被呼叫 如果你沒有寫,編譯器會自動呼叫super 方法,即呼叫了父類的構造方法 這並不是建立了兩個物件,其實只有乙個子類sub物件 之所以需要呼叫父類的構造方法是因為在父類中,可能存在私有屬性需要在其構造方法內初始化 package co...

繼承下建構函式的執行順序

這裡先給出結論,在貼出 與執行結果 乙個派生類建構函式的執行順序如下 第一步執行 虛擬基類的建構函式 多個虛擬基類則按照繼承的順序執行建構函式 第二步執行 基類的建構函式 多個普通基類也按照繼承的順序執行建構函式 第三步執行 類型別的成員物件的建構函式 按照初始化順序 第四部執行 派生類自己的建構函...