呼叫父類的帶引數的建構函式

2021-06-16 16:56:53 字數 2567 閱讀 6764

下面我們修改一下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 繼承下來。這時候問題來...