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

2021-06-18 05:52:55 字數 2644 閱讀 3033

下面我們修改一下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

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 雙擊 全選 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 ...

C 子類顯示呼叫父類的建構函式

加入有父類是這樣定義的 view plain copy to clipboard print?class ca ca int k virtual ca void output private int m 注意a類裡面有乙個私有成員m.假設有乙個子類是這樣定義的 view plain copy to ...

C 子類顯示呼叫父類的建構函式

加入有父類是這樣定義的 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 classca ca intk virtual ca voidoutput private intm 注意a類裡面有乙個私有成員m.假設有乙個子類是這樣定義的 1 2 3 4 class...