模板如字面的意思為模具模板,並不是乙個正真的物體。例如,在編寫比較兩個數大小的**中,我們可能要比較兩個整數的大小,也能需要比較浮點數等等大小。在這些**中,基本的邏輯都是相同的,只是比較數的型別不同。此時我們就可以用模板這個概念來完成對於不同型別的引數而相同的邏輯的操作。而模板會根據實際的引數型別推演出正真的**。如上圖所見,模板分為函式模板和類模板兩種。
template
返回型別 函式名(引數列表)
實現不同型別兩個數相加的模板函式,只有在主函式中才根據其引數型別推演出正真的**。
函式模板關鍵字:typename 或者class。t是引數型別,這裡可以任意命名。
與函式模板相似,只不過這裡是類的模板。
templateclass 類名
模板引數分為型別形參和非型別形參
例如:下面**中的max_size就是非型別的模板引數,它不是型別,而是代表陣列的大小。
template class student
;
特別注意:浮點數和類物件不能作為非型別模板引數。
模板特化分為全特化和偏特化。這兩個特化都是在已定義的模板基礎之上,不能單獨定義。
#includeusing namespace std;
templateclass teacher
private:
t1 _name;
t2 _age;
};templateteacher::teacher()
/全特化
template<>
class teacher
private:
int _name;
char _age;
};teacher::teacher()//全特化後定義成員函式不需要加模板形參
偏特化t2
templateclass teacher
private:
t1 _name;
int _age;
};templateteacher::teacher()
偏特化並不僅僅是指特化部分引數,而是針對模板引數更進一步的條件限制所設計出來的乙個特化版本。
// 區域性特化兩個引數為指標型別
template class teacher ;
template teacher::teacher()
// 區域性特化兩個引數為引用
解決上述問題一般是把原始檔和宣告檔案放在乙個叫"***.hpp"的檔案中
C 模板程式設計 函式模板 類模板
通常int sum int a,int b 這裡的兩個形參變數a b,就是為了接受實參的值。而模板的意義就在於此,模板就是針對型別的,使型別也可以進行引數化,即由原來的的固定的轉化為可變的。模板的意義 對型別也可以進行引數化了 裡面的內容不進行編譯,型別不知道 1 定義乙個模板形參列表 templa...
C 加密模板(類模板 函式模板)
題目描述加密機制包括明文 密文 金鑰。用金鑰對明文進行加密後就得到密文。在古典加密機制中,偏離值是一種常見的方法,加密過程為 1 在已知資料中找出最大值 2 用最大值減去各個數值,得到相應的偏離值 3 偏離值加上金鑰就得到密文 例如明文為1 2 3 4 5,金鑰是10,加密過程為 1 找出明文的最大...
模板 函式模板 類模板
模板主要是針對資料型別,不同的資料型別卻具有相同的操作形式,比如說,同樣是做入棧,int和double由於資料型別不一樣,需要做兩個棧才能滿足需求,誠然可以使用函式過載,但是終歸棧的操作是一樣的,只是資料型別不一樣。所以在此基礎上,假設,我們首先將所有的資料型別視為乙個大類,將它引數化,等到要用的時...