自己對多型中建構函式、函式過載執行順序和過程一直有些不理解,經過測試,對其中的執行順序有了一定的了解,希望對初學者有些幫助。
eg1:
public上述main方法中在new a物件時,程式首先進入class a中,執行class a的建構函式a(),然後執行class a中的fun()方法,故執行結果為:class
a
public
virtual
void
fun()
}public
class
b : a
public
void
fun()
}class
program
}
eg2:
public上述main方法中在new b物件時,由於b:a先執行父類的建構函式,所以先執行a中的建構函式a(),然後在執行b中的建構函式b(),故執行結果為:class
a
public
void
fun()
}public
class
b : a
public
void
fun()
}class
program
}
}上述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 分析 多重繼承與單繼承類似,也是先執行基類建構函式。多個基類之間...