C 模板(泛型)

2021-10-20 03:07:42 字數 2450 閱讀 9840

模板概念:模板是建立通用模具,大大提高復用性,型別引數化

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 支援引數化多型的工具,使用模板可以使使用者為類或者函式宣告一種一般模式,使得類中的某些資料成員或者成員函式的引數 返...