C 模板詳解

2022-07-13 02:57:11 字數 1860 閱讀 4839

模板是c++支援引數化多型的工具,使用模板可以使使用者為類或者函式宣告一種一般模式,使得類中的某些資料成員或者成員函式的引數、返回值取得任意型別。

模板是一種對型別進行引數化的工具;

通常有兩種形式:函式模板類模板

函式模板針對僅引數型別不同的函式

類模板針對僅資料成員成員函式型別不同的類。

使用模板的目的就是能夠讓程式設計師編寫與型別無關的**。比如編寫了乙個交換兩個整型int 型別的swap函式,這個函式就只能實現int型,對double,字元這些型別無法實現,要實現這些型別的交換就要重新編寫另乙個swap函式。使用模板的目的就是要讓這程式的實現與型別無關,比如乙個swap模板函式,即可以實現int型,又可以實現double型的交換。模板可以應用於函式和類。下面分別介紹。

注意:模板的宣告或定義只能在全域性,命名空間或類範圍內進行。即不能在區域性範圍,函式內進行,比如不能在main函式中宣告或定義乙個模板。

1.注意:對於函式模板而言不存在h(int,int)這樣的呼叫,不能在函式呼叫的引數中指定模板形參的型別,對函式模板的呼叫應使用實參推演來進行,即只能進行h(2,3)這樣的呼叫,或者int a, b; h(a,b)

函式模板的示例演示將在下文中涉及!

2、類模板物件的建立:比如乙個模板類a,則使用類模板建立物件的方法為am;在類a後面跟上乙個<>尖括號並在裡面填上相應的型別,這樣的話類a中凡是用到模板形參的地方都會被int所代替。當類模板有兩個模板形參時建立物件的方法為am;型別之間用逗號隔開。

3、對於類模板,模板形參的型別必須在類名後的尖括號中明確指定。比如a<2> m;用這種方法把模板形參設定為int是錯誤的(編譯錯誤:error c2079: 'a' uses undefined class 'a'),類模板形參不存在實參推演的問題。也就是說不能把整型值2推演為int型傳遞給模板形參。要把類模板形參調置為int型必須這樣指定am

4、在類模板外部定義成員函式的方法為:

template《模板形參列表》 函式返回型別 類名《模板形參名》::函式名(引數列表),

比如有兩個模板形參t1t2的類a中含有乙個void h()函式,則定義該函式的語法為:

templatevoid a::h(){}。

注意:當在類外面定義類的成員時template後面的模板形參應與要定義的類的模板形參一致。

c 模板詳解

c 模板分為2類 1.函式模板 格式 template void swap t a,t b 呼叫時 int a,b swap a,b double d1,d2 swap d1,d2 但是下面寫法是錯誤的 swap int,int 不能在函式呼叫的引數中指定模板形參的型別,對函式模板的呼叫應使用實參推...

C 模板詳解

模板分類 類模板假如現在需要實現乙個交換整數的函式,很簡單就能實現,但是如果沒有說交換型別,那麼可能需要寫各種型別的過載,函式過載雖然可以實現,但是這麼做很麻煩,函式的復用性很低,且 的可維護性比較低,乙個出錯可能讓所有過載都錯。void swap int left,int right void s...

c 模板詳解

模板是c 支援引數化多型的工具,使用模板可以使使用者為類或者函式宣告一種一般模式,使得類中的某些資料成員或者成員函式的引數 返回值取得任意型別。模板是一種對型別進行引數化的工具 通常有兩種形式 函式模板和類模板 使用模板的目的就是能夠讓程式設計師編寫與型別無關的 比如編寫了乙個交換兩個整型int 型...