C 建構函式過載以及預設引數引起的二義性

2022-09-06 10:57:16 字數 999 閱讀 3622

大家都知道當我們宣告乙個類時,系統會提供乙個預設建構函式。當我們需要提供引數進行對類資料成員進行初始化時

,就需要對類的帶參建構函式進行過載。同時,如果我們需要呼叫預設建構函式進行類資料成員的初始化時,還需要對類的

預設建構函式進行過載。也許就在這一塊,我們很多人都遇到過同樣的錯誤:

當我們給出乙個帶預設引數的建構函式,並且過載乙個預設建構函式,當我們定義乙個類物件時,如果不傳遞引數,會出現

二義性錯誤。因為我們沒有傳遞引數時,系統預設又兩種選擇,一種是呼叫預設建構函式,另一種是呼叫帶參建構函式並傳

遞預設引數。

如下

1

class

complex 2

1112 complex(float r = 0, float i = 0

) 13

17};

18int

main()

19

在編譯的時候出現錯誤:

1

"color:#ff0000;

">error: call of overloaded 『complex()』 is ambiguous

對此,有一下兩種解決方法

1.去掉預設建構函式。

1

class

complex 2

11 };

這時,當我們不給建構函式傳遞引數時,系統會傳遞預設引數以對類資料成員進行初始化。

complex c;

相當於complex c(0,0);

2.去掉帶參建構函式的預設引數

1

class

complex 2

1112 complex(float r, float

i)

13

17 };

complexc;

相當於complex c();

C 函式過載, 預設引數

在我們的自然語言當中,乙個詞在不同的情景之下可能會有多重不同的含義,但是我們可以通過合理地判斷來確定該詞的真正含義,這種情況,我們可以說該詞被 過載 了.關於函式過載的概念 函式過載其實就是函式的一種特殊的情況,在我們的c 中允許在同一作用域當中宣告幾個功能類似的同名函式,但是這個同名函式的形參列表...

C 預設引數 函式過載

預設引數 預設引數是宣告或定義函式時為函式的引數指定乙個預設值。在呼叫該函式時,如果沒有指定實參則採用該預設值,否則使用指定的實參。例void testfunc int a 0 intmain 預設引數分類 1.全預設引數 void testfunc int a 10,int b 20,int c ...

C 函式過載 預設引數以及命名空間

c 入門 在接觸c 之前太多人都說 c 很難,非常難 今天我也要開始一探這c 的水了,為了避免淹死,索性我也就不去那深水區蹚了,就在這淺灘裡走一走。c 是一門通用的程式語言,廣泛應用於系統軟體與應用軟體的開發,而我一直一來學習的c語言幾乎是c 的乙個子集。所以c語言支援的語法c 基本都支援並且需要用...