C 中的函式過載與模板

2021-06-28 19:16:49 字數 1574 閱讀 2573

函式就像工具,工具有好多種,我們就以螺絲刀為例來感受一下它和函式過載和模板的一些相似關係。

螺絲刀的種類有很多,常見的是一字型和梅花型, 每種型別從小到大又有好多個號。 我們根據螺絲樣式和大小

選擇使用那種型別的和選擇多大號的螺絲刀。 螺絲刀就幹了一件事,擰螺絲,也就是說各種螺絲刀他們的功能是相

同的,只是型別不同而已。

一、函式過載

在c++中,允許用乙個函式名來表達功能相同,只是操作型別(形參個數和型別)不同的函式,這就是函式過載。

編譯器能夠根據他們各自的實參和形參以及引數的個數進行最佳分配,自動決定呼叫哪乙個函式體。看下面這個例 子。

#includeusing namespace std;

int add(int x,int y) //一字 螺刀(一字,5號)

double add(double x ,double y) //梅花 螺刀(梅花,5號)

明白了函式過載我們還得注意乙個問題:

如果函式名相同、形參表也相同,僅僅是返回型別不同,是非法的。就像下面這個例子一樣,當需要一字5號螺絲刀

時,不知道選哪個型別的螺刀。

int add(int x,int y)         //一字 螺刀(一字,5號)

double add(int x,int y) //梅花 螺刀(一字,5號)

二、函式模板螺絲刀機器可以製造出不同型別的螺絲刀,在這裡有個函式模板,能夠生成不同型別的函式。

模板形式為:

template 返回型別   函式名 (形參表)

我們來看看螺絲刀時如何製作的

#includeusing namespace std;

template 《樣式類,規格類》

樣式1 螺刀(樣式1,規格1)

int main()

{ cout《螺刀(一字,5號)<

最後成品分別為 一字 螺刀(一字,5號)  和 梅花 螺刀(梅花,5號) 

三、區別和聯絡

將邏輯功能相同的而函式引數和函式值型別不同的多個過載函式用乙個函式來描述,函式模板建立乙個通用功能

函式,支援多種不同的形參,簡化了過載函式的函式體設計,使**的可重用性大大提高,從而提高軟體的開發效

率。我們需要什麼工具,就把引數給機器,直接加工出來使用即可。

C 函式的模板與過載解析

模板是c 泛型程式設計的基礎,乙個模板就是乙個建立類或者函式的方案。在具體使用時,需要將模板引數轉化為具體型別。編譯器會對函式模板進行兩次編譯,在宣告的地方對模板本身進行編譯,在呼叫的地方對引數替換後的 進行編譯。c 提供兩種模板機制 函式模板和類模板,這裡我們只討論函式模板。1,例項化和具體化 為...

C 中函式過載與函式模板聯絡與區別

c 中是支援函式過載的,函式過載指的是用同乙個函式名字定義多個函式,這些函式的引數型別不同,個數也可以不同。當我們呼叫函式時系統會根據引數型別和引數個數來匹配函式。用例 int main int max int a,int b,int c float max float a,float b,floa...

函式過載與模板

提到函式過載想必大家都非常清楚,但是大家是否了解所有細節呢,經過這段時間閱讀 我發現其實我一直以來並未完全理解過載機制,此處做乙個小小的總結 1 首先函式過載是指對函式名的過載,它只在同一作用域中有效,不同作用域中的名字不可構成過載,除非顯示使用using關鍵字將名字引入該作用域。如例所示 void...