當你在寫**的時候可能會遇到這樣的情況,多處地方都需要呼叫同乙個功能/方法,但是我們不知道呼叫者傳遞進來的引數型別,以及這個方法的返回型別,或許你可能想到的是過載或者重寫,但是還有另一種方式實現就是-- 模板。
當然除此之外,還有類模板,它是實現**重用的一種工具。
模板可以說是分為兩種型別,一種是類模板,一種是函式模板,先來說下函式模板。
場景:兩個數相加求和,我們並不知道它是int,double還是long的兩個數值相加。那我們可能會這樣寫:
int sum(int x, int y)
double sum(double x, double y)
long sum(long x, long y)
可以看到,按上面這種寫法,3個方法中的函式體都一樣,也就是說其實他們執行的業務都一樣,都是兩個數
相加,只是兩個數的型別不同。這是不是與開頭所說的模板的介紹相似,那我們就用函式模板來實現下這個方法。
函式模板的宣告格式:
template返回型別 函式名(模板形參表)
template返回型別 函式名(模板形參表)
以上兩種方式都可以,用 class的方式是早期c++的宣告方式,template t為型別引數
sum函式的具體宣告
#includeusing namespace std;
templatet sum(t x, t y)
int main()
int sum(int x, int y)
templateclass 類名
其中的typename以及class與函式模板相同。宣告了類模板之後還需要定義其物件。
定義類模板物件的格式:
類模板名《實際型別名》物件名(實參列表);
接下來使用類模板來實現下剛開始的那個列子,宣告乙個類模板,其中含有乙個兩個數相加求和的方法。
#includeusing namespace std;
templateclass a
t sum()
private:
t a, b;
};int main()
其中如果返回值是void,那返回值型別可以省略。
我們把上面的例子改下
#includeusing namespace std;
templateclass a;
templatea::a(t x, t y)
templatet a::sum()
int main()
int main(){
cout<
以上基本上就是模板的介紹,可以根據上面的例子寫寫**,這樣有助於理解。這裡僅僅只是對模板進行乙個初步
的探索,要多理解在什麼情況下需要使用模板,靈活運用到專案中能大大提高你的開發效率。
C 之模板 模板的學習 學習模板
c 之模板 模板學習 學習模板 模板就是建立通用的模具,大大提高復用性 函式模板 c 提供兩種模板機制函式模板和類模板 函式模板語法 函式模板作用 建立乙個通用函式,其函式返回值型別和形參型別可以不具體制定,用乙個虛擬的型別來代表 語法 template typename t 函式宣告或定義解釋 t...
C 模板學習
模板定義 模板就是實現 重用機制的一種工具,它可以實現型別引數化,即把型別定義為引數,從而實現了真正的 可重用性。模版可以分為兩類,乙個是函式模版,另外乙個是類模版。類模板 允許使用者為類定義一種模式,使得類中的某些資料成員 某些成員函式的引數 某些成員函式的返回值,能夠取任意型別 包括系統預定義的...
C 模板學習
我們已經學過過載 overloading 對過載函式而言,c 的檢查機制能通過函式引數的不同及所屬類的不同。正確的呼叫過載函式。比如。為求兩個數的最大值。我們定義max 函式須要對不同的資料型別分別定義不同過載 overload 版本號。函式1.intmax int x,int y 函式2.floa...