下面我們修改一下animal類的建構函式,增加兩個引數height和weight,分別表示動物的高度和重量。**如例2-13所示。
例2-13
雙擊**全選 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <
iostream.h
>
class animal
~animal()
void eat()
void sleep()
void breathe()
};
class fish:public animal
~fish()
};
void main()
當我們編譯這個程式時,就會出現如下錯誤:
那麼這個錯誤是如何出現的呢?當我們構造fish類的物件fh時,它需要先構造animal類的物件,呼叫animal類的預設建構函式(即不帶引數的建構函式),而在我們的程式中,animal類只有乙個帶引數的建構函式,在編譯時,因找不到animal類的預設建構函式而出錯。
因此,在構造fish類的物件時(呼叫fish類的建構函式時),要想辦法去呼叫animal類的帶引數的建構函式,那麼,我們如何在子類中向父類的建構函式傳遞引數呢?可以採用如例2-14所示的方式,在構造子類時,顯式地去呼叫父類的帶引數的建構函式。
例2-14
雙擊**全選
12
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <
iostream.h
>
class animal
…
};
class fish:public animal
…
};
void main()
注意程式中以粗體顯示的**。在fish類的建構函式後,加乙個冒號(:),然後加上父類的帶引數的建構函式。這樣,在子類的建構函式被呼叫時,系統就會去呼叫父類的帶引數的建構函式去構造物件。這種初始化方式,還常用來對類中的常量(const)成員進行初始化,如下面的**所示:
雙擊**全選
12
3
4
5
6
7
8
class point
;
當然,類中普通的成員變數也可以採取此種方式進行初始化,然而,這就沒有必要了。
在子類中呼叫父類的帶引數的建構函式
下面我們修改一下animal類的建構函式,增加兩個引數height和weight,分別表示動物的高度和重量。如例2 13所示。例2 13 雙擊 全選 12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 2...
如何呼叫父類的建構函式?
如果想要在子類的建構函式中呼叫父類的建構函式該怎麼辦呢?呼叫父類建構函式的唯一方法是呼叫supper 它看起來會像下面這樣 public class duck extends animal 小孩能夠在父母之前出生嗎?如果你把父類想象成子類的父母,那就可以看出來誰是先存在的。父類的部分必須在子類建立完...
有引數的父類建構函式
如果父類的建構函式有引數該怎麼辦?你能夠傳值進去嗎?如果不行的話,則沒有無引數建構函式的類將不能被繼承。想象這個情景 所有的動物都有名字。所以animal這個類有個getname 可以返回name例項變數的值。此例項變數是被標記為私有的,但hippo這個子類有把getname 繼承下來。這時候問題來...