using system;
class a
public virtual void printfields(){}
}class b:a
public override void printfields()
,y=",x,y);
}當使用new b()建立b的例項時,產生什麼輸出?
答:x=1,y=0
答案詳解:
因為構造b之前,先執行變數,y沒有明確賦值,預設為0。執行b的建構函式,因為b繼承a,所以先執行a的建構函式。a構造函式呼叫的printfields方法在a類裡是虛函式,它的實現是在b類,所以執行b類的printfields方法,結果輸出。雖然繼續執行完b的建構函式,使y的值是-1.但結果之前已經輸出。
1-8代表了new b的時候,程式的執行過程。
class a
public virtual void printfields()
}class b : a
public override void printfields()//⑥
,y=", x, y);//⑦,輸出,此時:x=1,y=0}}
當程式例項化b時,因為繼承關係,,b會先呼叫其父類的構造方法,,而a的構造中又呼叫 了 printfields 在a中 printfields是虛方法,,所以會呼叫b中的重寫 當呼叫 printfields時 b的構造還未執行,所以y=0而不是-1.所以輸出結果是x=1,y=0 如果 b b=new b();b.printfields();那麼輸出結果就是x=1,y=-1
C 面試題總結
為什麼c 的member function template不能是虛的?問題的意思是 為什麼在c 裡面,乙個類的成員函式不能既是template優勢virtual,比如,下面的 是不合法的 class animal 原因如下 1.從uuix c開始,乙個c c 程式就可以被分開編譯,然後用乙個lin...
C 面試題總結
1 程序與執行緒的區別?答案 2 程序間的通訊方式?答案 3 執行緒間的通訊方式?答案 4 棧和堆的區別?答案 5 c 和c的區別?答案 6 紅黑樹和b樹的區別?答案 7 產生死鎖的必要條件?已經如何預防死鎖?答案 8 tcp和udp的區別?答案 9 tcp狀態中 time wait 的作用?答案 ...
C 面試題總結
1 dynamic cast 與 static cast 區別 2 static,const,int int 初始化方式,初始化順序 3 虛函式呼叫原理,虛函式表多個物件共用乙個。4 非虛函式,如何呼叫的 5 拷貝建構函式與賦值建構函式的實現 6 純虛函式如何實現,抽象類能否被例項化,為什麼不能例項...