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 的乙個題目!高手進!
這個題目說難很難,說簡單也很簡單。它是1995年的acm題,件 難是因為基本沒啥直接的計算方法。說不難,因為可以暴力來解,就是說,先依次計算1位串,2位串 把這些計算結果全部存在表中,然後字串比較查詢 可以用檢索法 include include int main for i a i z i for...
c語言級數演算法題目s1xx22x
雖然bai沒錯,但是有個問題du 就是n 漲很快 a i這一步zhi,會很快超dao出變數所內承受的上限。容 for i 1 i n i printf d s 這樣,n可以取得更大的數。a,s要用double型宣告。另外,沒見你的對x的賦值 c語言中關於級數求和的問題y x x x 3 3 1 x ...
c語言。。int a 5,b 3,w 1,x 2,y 3,z 4a wxb yz 最後b的值為什麼是三
因為w 1 x 2這個條件不成立,所以整個邏輯語句就是不成立,程式不會再去執行 後面的 b y z這個語句,所以判斷後b的值不變還是3 主要看最抄後的乙個表示式 求值 襲a w x b y z 這個表示式的值是多少呢?顯然不是true就是false,因為這是個邏輯表示式 先看 前面的表示式,求值是f...