C 繼承的執行順序

2022-06-08 02:36:10 字數 2161 閱讀 4963

自己對多型中建構函式、函式過載執行順序和過程一直有些不理解,經過測試,對其中的執行順序有了一定的了解,希望對初學者有些幫助。

eg1:

public

class

a

public

virtual

void

fun()

}public

class

b : a

public

void

fun()

}class

program

}

上述main方法中在new a物件時,程式首先進入class a中,執行class a的建構函式a(),然後執行class a中的fun()方法,故執行結果為:

eg2:

public

class

a

public

void

fun()

}public

class

b : a

public

void

fun()

}class

program

}

上述main方法中在new b物件時,由於b:a先執行父類的建構函式,所以先執行a中的建構函式a(),然後在執行b中的建構函式b(),故執行結果為:

}上述main方法中先new b物件,先執行a中的建構函式a(),然後在執行b中的建構函式b(),最後呼叫class a的fun()方法,故執行結果為:

}上述main方法同樣是先new b物件,先執行a中的建構函式a(),然後在執行b中的建構函式b(),但是子方法中使用了override關鍵字「覆蓋」,使得子類中方法覆蓋了父類中的方法,無法再訪問父類中原始方法。(要重寫方法,父類方法必須有virtual關鍵字),所以其執行結果為:

}上述main方法同樣是先new b物件,先執行a中的建構函式a(),然後在執行b中的建構函式b(),但是子方法中使用了new關鍵字,由於其仍是a是a型別物件,所以仍然呼叫a中的方法,其執行結果如下:

1.b繼承a,請問a是a的例項還是b的例項啊? 

答:b的例項

2.物件a可以呼叫a類中的方法嗎?可以呼叫b的方法嗎? 

答:不一定,如果是虛擬方法,並且在b類過載了a的虛擬方法,a將會呼叫b的同名方法,普通方法會呼叫a的方法

C 簡單的繼承執行順序

筆試裡面考c 基礎遇到了好幾次這種題目。先上 include using namespace std class a a virtual void fun class b public a b virtual void fun int main 問執行之後的結果。若對c 的繼承有所了解,答案應該很快...

Java繼承構造執行順序

package test public class father public father package test public class son extends father public son public son int s public static void main string...

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

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