函式的過載與函式模板

2021-07-28 16:28:42 字數 1316 閱讀 7143

有時候想要實現幾個功能相近,但只是處理的引數型別不同的函式,在c語言裡我們要把這些函式起上不同的名字,而在c++裡我們可以把這些函式都給上乙個函式名只需要把不同的引數給入函式就可以了,這樣大大的減少了函式名的數量,增強了**的可讀性。

c++中這叫做函式的過載,是在同一作用域內宣告幾個功能類似的同名函式,但是這些函式必須是引數型別和數量必須不同。呼叫時,編譯器會自動匹配引數最相符的函式,這樣就可以實現乙個運算子完成不同的運算功能。

函式模板簡單來說就是建立乙個通用的函式,這個函式的返回值型別和引數型別都是未知的。這個通用函式就是函式模板。函式模板的出現就是為了解決當要實現幾個功能相同只是引數的型別不同的運算時要定義多個函式的問題。當函式呼叫時編譯器會根據實參的型別來取代模板中的型別,實現不同型別的運算。函式過載一樣是為了減少**的冗餘,提高**的可讀性。

示例**

template

//class a 為模板類

void print(a a)

int main()

**執行結果和函式過載的結果一樣。

編譯器認為,對於特定的型別,如果程式設計師能夠對函式進行更好的實現,那麼就應該執行你實現的版本。所以函式模板的特化就出現了,他是在你給定的模板中給入指定型別引數,當函式被呼叫時檢測到有與實參相匹配的特化過的函式模板,就會優先呼叫。

特化分為全特化與偏特化。全特化就是限定死模板實現的具體型別,偏特化就是如果這個模板有多個型別,那麼只限定其中的一部分。但是c++中規定函式模板只能全特化,不支援偏特化。原因可能是應因為偏特化通過過載就能實現。

示例

template

//函式模板

void print(a a,b b)

template

<>//全特化

void print(int a,char c)

//template//偏特化

//void print(a a,char c)

//int main()

函式過載和函式模板都可以實現乙個函式名的多用,將功能相近的函式用乙個函式名來定義。但是函式過載在實現的時候依然要把函式一一的實現,而函式模板就可以簡化這個過程,只需給出乙個模板就完成所有的定義。不過在函式要實現不同型別進行不同操作的時候函式過載就可以發揮它靈活多變的特點。

函式過載與函式模板

函式過載與函式模板 在我們要實現類似的函式功能時,但他們的資料型別或者個數不一樣,這時就需要用到函式過載 求3個數中最大的數 分別考慮整數 雙精度數 長整數的情況 include using namespace std int main int max int a,int b,int c 定義求3個...

函式模板及函式過載

問題描述 編寫乙個函式模版,能夠處理整數 實數 串類物件的大小比較,返回兩個值中的最小者。為了能夠處理字元陣列儲存的字串的大小比較,則需要使用函式過載的形式。為了能夠處理串類物件的大小比較,則需要對串類實現關係運算子 或 的過載。主函式如下,請勿修改 int main string string c...

函式過載和函式模板

要求 1 函式名相同 2 引數不同 型別,個數或順序 但注意 認為這些型別相同 int a和int a 呼叫時都寫成f a int a和int a 呼叫函式時輸入的東西相同 不能以形參名,返回值作為區分。include using namespace std void out int a void ...