1樓:匿名使用者
流程是這樣的:類b繼承了類a,,,而且重寫了a中的方法printfields
當程式例項化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
2樓:匿名使用者
x=1,y=0
1、派生類b構造的時候會呼叫基類a的建構函式,所以會執行printfields();
2、因為printfields是虛方法,所以基類呼叫派生類的printfields方法,因此產生輸出。
3、x是在定義的時候初始化的,而y是在建構函式中賦值的,所以x會在呼叫建構函式之前被賦值。
4、派生類建構函式會在構造自身之前呼叫基類建構函式,因此執行printfileds方法的時候y沒有被賦值,預設初值為0。
綜上所述,得結果x=1,y=0
麻煩解釋一下面的c#**,為什麼,x=1,y=0?謝謝!
3樓:
先初始化子類的成員變數,然後執行父類的建構函式,最後執行子類的建構函式。
4樓:匿名使用者
這個結果是正確的啊,你b繼承了a,所以當你例項時,會補a裡的值覆蓋啊
5樓:匿名使用者
這是你執行出來的結果嗎?
懂C語言的進,懂c語言的進入
include這個地方最好還是寫一下,因為有些編輯器不寫這個,程式是執行不了的,這樣寫屬於標準的c語言 void main 主函式前加void,和上句是一樣的解釋。printf the result for i 1 i 10 i printf d a i 冒泡法是較大 小 的數排在前面,要看你的排序...
c語言的一道題目求大神進,C語言的一道題目,求大神進?
int findchar char strings,int num,char value char pos null for int i 0 i num i return counts int main int n findchar s,3,g printf d n n return 0 char ...
C語言的幾個題目,懂的幫忙解答下
include int main int i,x,s 0,max,min for i 0 i scanf d x if x 0 break printf grade of student d d n i 1,x s x if i 0 max min x else if x max max x els...