(原創) 一個關於constructor的觀念問題 (C/C++) (.NET) (C#) (Java)
Abstract
一個在JavaWorld@TW有人發問的問題,雖然是Java,但在C++,C#都適用。
Introduction
http://www.javaworld.com.tw/jute/post/view?bid=29&id=140687&sty=1&tpg=4&age=0
一個在JavaWorld@TW有人發問的問題,雖然是Java,但在C++,C#都適用。
Introduction
http://www.javaworld.com.tw/jute/post/view?bid=29&id=140687&sty=1&tpg=4&age=0
1public class son extends father
2{
3 public son( int i ){ }
4 public son( int i , float f)
5 {
6 super( i,f);
7 }
8}
2{
3 public son( int i ){ }
4 public son( int i , float f)
5 {
6 super( i,f);
7 }
8}
請問在father裡要加上那些建構子?
A:public father(){}
B:public father(int k){}
C:public father(int i, flaot f){}
D:public father(float f){}
答案是A,C,你答對了嗎?
3行public son(int i)這個constructor,因為沒有呼叫任何base-class的constructor,所以compiler會自動在body加上super()去呼叫base-class的default constructor,所以要選A。
4行public son(int i, float f)這個constructor,因為呼叫了base-class的super(i,f),compiler就不自動加上super()了,因此base-class須加上public father(int i, float f) {},所以要選C。
更詳細的理由請參考(原創) 為什麼derived-class會去執行base-class的default constructor? (C/C++)。
See Also
(原創) 為什麼derived-class會去執行base-class的default constructor? (C/C++)
(原創) default constructor的迷思 (C/C++)