模板概念:模板是建立通用模具,大大提高復用性,將型別引數化。
c++泛式程式設計思想,主要利用的技術就是模板
c++提供模板機制:函式模板和類模板
函式模板和類模板區別:
① 類模板沒有自動型別推導使用方式
② 類模板在模板引數列表中可以有預設引數
作用:建立通用函式,其函式返回值型別和形參型別可以不具體制定,用乙個虛擬的型別代表。
語法:template
[template ——宣告建立模板]
[typename ——表面其後面的符號是一種資料型別,可以用class替代]
[t ——通用的資料型別,名稱可以替換,通常用大寫字母]
使用方式:自動型別推導,顯示指定型別
注:① 自動型別推導,必須推導出一致的型別型別t,才能使用
② 模板必須要確定出t的資料型別,才可以使用
普通函式與函式模板區別://函式模板
template//宣告模板,t是乙個通用資料型別
void swaptest(t& a, t &b)
//排序模板 (從小到大)
templatevoid sorttest(t arr,int len)
//交換min 和 i元素
if(min != i)
swaptest(arr[min],arr[i]);
}}int main()
; sorttest(intarr,sizeof(intarr)/sizeof(int));
system("pause");
return 0;
}
① 普通函式呼叫可以發生隱式型別轉換
② 函式模板 用自動型別推導,不可發生隱式型別轉換
③ 函式模板 用顯示指定型別,可以發生隱式型別轉換
呼叫規則:
① 如果函式模板和普通模板都可以呼叫,優先普通函式
② 可以同空模板引數列表,強制呼叫函式模板
③ 函式模板可以發生函式過載
④ 如果函式模板可以產生更好匹配,優先函式模板
作用:建立通用類,類中成員 資料型別可以不具體制定,用虛擬的型別代表。
語法:template
[template ——宣告建立模板]
[class ——表面其後面的符號是一種資料型別,可以用typename替代]
[t ——通用的資料型別,名稱可以替換,通常用大寫字母]
使用方式:自動型別推導,顯示指定型別
建立時機:類模板中成員函式在呼叫時建立。
類模板物件做函式引數:① 指定傳入型別 ② 引數模板化 ③ 整個類模板化
類模板繼承//類模板
template//預設引數型別
class person
nametype m_name;
agetype m_age;
}//1.指定傳入型別
void print1(const person&p){}
//2.引數模板化
templatevoid print2(const person&p){};
//3.整個類模板化
templatevoid print3(const t &p){};
int main()
注意事項:
當子類繼承的父類時乙個模板時,子類在宣告時,要指出父類中t的型別
如果不指定,編譯器無法給予子類分配記憶體
如果要靈活指定父類中t的型別,子類也需要變為模板
templateclass base
//class son : public base//必須指定乙個型別
//靈活指定父類中t型別,子類也需要是模板
template//t1:父類t型別 ,t2:子類t2型別
class son : public base
int main()
C 泛型程式設計 模板
在學習c c 過程中,我們可能常用幾種函式,由於傳入的引數不同,需要進行不同的函式的編寫,在c語言中需要根據引數和功能的不同重新編寫新的函式,而在c 中有函式過載這樣的機制,一定程度上解決了問題,但是 過載的函式僅僅只是型別不同,的復用率比較低,只要有新型別出現時,就需要增加對應的函式 的可維護性比...
C 泛型程式設計(模板)
2.類模板 我們先來看乙個概念 泛型程式設計 使用模板,編寫和型別無關的 沒有模板之前,一些函式或者類,針對不同的型別需要寫很多重複的 函式 比如交換函式swap,假如傳入的資料型別不同,int,char,double。我們要實現不同的型別物件函式。類 比如我們像實現乙個資料結構棧stack,sta...
C 泛型程式設計 模板
0.所謂泛型程式設計就是獨立於任何特定型別的方式編寫 使用泛型程式時,需要提供具體程式例項所操作的型別或者值。我們經常用到stl容器 迭代器 和演算法都是泛型程式設計的例子 模板是c 支援引數化多型的工具,使用模板可以使使用者為類或者函式宣告一種一般模式,使得類中的某些資料成員或者成員函式的引數 返...