c 函式的高階特性

2021-07-30 05:11:37 字數 1459 閱讀 3501

c++函式的高階特性

c++中增加了過載(overload),內聯(inline),const,virtual四種新機制。其中過載和內聯機制既可以用於全域性函式,也可以用於類的成員函式,const 和virtual 機制僅用於類的成員函式。

1.函式過載

c++採用過載的理由

l 可以將語義,功能相似的幾個函式用同乙個名字表示,即函式過載。這樣提高了函式的易用性。

l 類的建構函式需要過載機制。c++中建構函式只能有乙個名字,必須與類同名。

實現過載

函式的兩大元素:引數和返回值

如果同名函式的引數不同,則很容易區分出他們是不同的函式,如果同名函式僅僅是返回值型別不同,有時候可以區分,但有時候卻不能,在c++中有時候可以忽略返回值,,所以只能靠引數而不能靠返回值來區分過載函式,

如果c++程式要呼叫已經編譯的c語言函式

void  foo(int x, int  y);

該函式在c編譯器編譯之後在庫中的名字為_foo,而c++則會產生_foo_int_int之類的名字來支援函式過載和型別安全檢查,由於編譯之後的名字不同,c++程式不能直接呼叫c函式,c++提供了乙個c連線指定符號extern 「c」,告訴編譯器函式foo是個c連線,應該在庫中尋找_foo而不是_foo_int_int

!!!!

不是就兩個函式名字相同就是過載,全域性函式和類的成員函式同名不算過載,因為函式的作用域不同,如果某個類的某個成員函式要呼叫全域性函式,

為了與成員函式區分,前面加「::」標誌。

注意隱式轉換導致過載函式產生二義性

2.引數的預設值

有一些引數的值在每次函式呼叫的時候都相同,每次書寫就會比較麻煩,c++語言採用引數的預設值會使書寫變得簡潔

u 引數預設值只能出現在函式的宣告中,不能出現在函式的定義中

void foo(int x=0, int y=0) ;

原因:函式的實現(定義)與引數是否有預設值無關,所以沒有必要讓函式的預設值出現在函式的定義體中。 引數的預設值可能會改動,修改函式宣告中的值比修改函式定義中方便。

u 如果有多個引數,應該從後到前挨個預設

u 使用引數的預設值並沒有賦予函式新的功能,僅僅是為書寫簡潔,可能會提高函式的易用性,也可能會降低函式的可理解性,所以只能適當的使用函式的預設值。不合理的使用引數的預設值可能導致過載函式產生二義性。

C 函式的高階特性

函式過載 編譯器會為每乙個函式產生乙個內部名稱。重新命名機制與函式的形參有關,與函式返回值無關。所以函式過載函式名相同,形參列表不同才能過載。注意 c 程式需要呼叫已經被編譯的c函式,c 提供了乙個c連線交換指示符extern c 來解決這個問題 ifdef cplusplus extern c e...

C 函式的高階特性 函式過載

對比於c 語言的函式,c 增加了過載 overloaded 內聯 inline const 和virtual 四種新機制。其中過載和內聯機制既可用於全域性函式也可用於類的成員函式,const 與 virtual 機制僅用於類的成員函式。1.過載 overloaded 過載的理由 1 在c 程式中,可...

C 函式的高階特性 函式過載

對比於c 語言的函式,c 增加了過載 overloaded 內聯 inline const 和virtual 四種新機制。其中過載和內聯機制既可用於全域性函式也可用於類的成員函式,const 與 virtual 機制僅用於類的成員函式。1.過載 overloaded 過載的理由 1 在c 程式中,可...