C 中的模板(函式模板,類模板)

2021-08-21 19:56:59 字數 1244 閱讀 3888

1.模板是生成類或函式的框架,模板使用形參,當實際資料型別賦值給形參的時候,才由編譯器生成類或函式

2.函式模板的宣告由關鍵字template和包含乙個或多個資料型別形參的引數列表構成,形參資料型別(t)前面可以是class也可以是typename,型別形參t要用尖括號<>括起來:

template 或template

3.函式模板的呼叫

#include "stdafx.h"

#include

template 

t max(t a,t b)

returna>b?a:b;

int _tmain(int argc, _tchar* argv)

printf("%d\n",max(3,10));//更ü完?善?寫′法ぁax(3,10)

printf("%f\n",max(21.3,20.1));

return 0;

4.用作模板的型別可以是基本型別,也可以是乙個類,類似於函式模板的做法,類模板對成員資料和成員函式的引數型別進行泛化,下面是乙個模板類a,建構函式和comp函式均在模板宣告中定義,成為內聯函式,print_type函式在模板外定義,需要用關鍵字template說明t1和t2是模板型別,並以a::做函式的字首作用域

: 定¨義?控?制?臺?應畖用?程ì序ò的?入?口ú點?。£

#include "stdafx.h"

#include 

#include 

template 

class a//內聯函式

bool comp()//內聯函式

voidprint_type();//函式宣告

//成員函式printf_type定義

template 

voida::print_type(){

printf("i的型別是%s\n",typeid(i).name());//列印i的型別名

printf("j的型別是?%s\n",  typeid(j).name());

int _tmain(int argc, _tchar* argv)

{   aa(3,89.2);

if(a.comp())

printf("i>j\n");

else printf("i<=j\n");

a.print_type();

return 0;

5.當模板的泛化處理不適合某個特定的資料型別時,可針對這個資料型別給出相應的模板,包括函式模板特化和類模板特化(叫完全特化技術也叫精確特化)

C 模板函式,模板類

模板如字面的意思為模具模板,並不是乙個正真的物體。例如,在編寫比較兩個數大小的 中,我們可能要比較兩個整數的大小,也能需要比較浮點數等等大小。在這些 中,基本的邏輯都是相同的,只是比較數的型別不同。此時我們就可以用模板這個概念來完成對於不同型別的引數而相同的邏輯的操作。而模板會根據實際的引數型別推演...

模板 函式模板 類模板

模板主要是針對資料型別,不同的資料型別卻具有相同的操作形式,比如說,同樣是做入棧,int和double由於資料型別不一樣,需要做兩個棧才能滿足需求,誠然可以使用函式過載,但是終歸棧的操作是一樣的,只是資料型別不一樣。所以在此基礎上,假設,我們首先將所有的資料型別視為乙個大類,將它引數化,等到要用的時...

C 模板程式設計 函式模板 類模板

通常int sum int a,int b 這裡的兩個形參變數a b,就是為了接受實參的值。而模板的意義就在於此,模板就是針對型別的,使型別也可以進行引數化,即由原來的的固定的轉化為可變的。模板的意義 對型別也可以進行引數化了 裡面的內容不進行編譯,型別不知道 1 定義乙個模板形參列表 templa...