在c++中為了節省工作量,出現了一種模板類。
可以多次重寫。
1、
在c++template中很多地方都用到了typename與class這兩個關鍵字,而且好像可以替換,是不是這兩個關鍵字完全一樣呢?
答:class用於定義類,在模板引入c++後,最初定義模板的方法為:template,這裡class關鍵字表明t是乙個型別,後來為了避免class在這兩個地方的使用可能給人帶來混淆,所以引入了typename這個關鍵字,它的作用同class一樣表明後面的符號為乙個型別,這樣在定義模板的時候就可以使用下面的方式了:
template.在模板定義語法中關鍵字class與typename的作用完全一樣。
2.類模板與模板類的概念
(1) 什麼是類模板
乙個類模板(也稱為類屬類或類生成類)允許使用者為類定義一種模式,使得類中的某些資料成員、默寫成員函式的引數、某些成員函式的返回值,能夠取任意型別(包括系統預定義的和使用者自定義的)。
如果乙個類中資料成員的資料型別不能確定,或者是某個成員函式的引數或返回值的型別不能確定,就必須將此類宣告為模板,它的存在不是代表乙個具體的、實際的類,而是代表著一類類。
(2)類模板定義
定義乙個類模板,一般有兩方面的內容:
a.
首先要定義類,其格式為:
template
class foo
foo
為類名,在類定義體中,如採用通用資料型別的成員,函式引數的前面需加上
t,其中通用型別
t可以作為普通成員變數的型別,還可以作為
const
和static
成員變數以及成員函式的引數和返回型別之用。例如:
template
class test
test(t k);
~test(){}
void print();
t operator+(t x);
};
b.
在類定義體外定義成員函式時,若此成員函式中有模板引數存在,則除了需要和一般類的體外定義成員函式一樣的定義外,還需在函式體外進行模板宣告
例如
template
void test::print()
如果函式是以通用型別為返回型別,則要在函式名前的類名字尾上「
」。例如:
template
test::test(t k):i(k)
template
t test::operator+(t x)
c.
在類定義體外初始化
const
成員和static
成員變數的做法和普通類體外初始化
const
成員和static
成員變數的做法基本上是一樣的,唯一的區別是需再對模板進行宣告,例如
template
int test::cnt=0;
template
test::test(t k):i(k)
(3) 類模板的使用
類模板的使用實際上是將類模板例項化成乙個具體的類,它的格式為:類名
<
實際的型別
>
。
模板類是類模板例項化後的乙個產物。
說個形象點的例子吧。我把類模板比作乙個做餅乾同的模子,而模板類就是用這個模子做出來的餅乾,至於這個餅乾是什麼味道的就要看你自己在例項化時用的是什麼材料了,你可以做巧克力餅乾,也可以做豆沙餅幹,這些餅乾的除了材料不一樣外,其他的東西都是一樣的了。
3.函式模板和模板函式
(1)函式模板
函式模板可以用來建立乙個通用的函式,以支援多種不同的形參,避免過載函式的函式體重複設計。它的最大特點是把函式使用的資料型別作為引數。
函式模板的宣告形式為:
template
《返回型別》《函式名》(參數列)
其中,template是定義模板函式的關鍵字;template後面的尖括號不能省略;typename(或class)是宣告資料型別引數識別符號的關鍵字,用以說明它後面的識別符號是資料型別識別符號。這樣,在以後定義的這個函式中,凡希望根據實參資料型別來確定資料型別的變數,都可以用資料型別引數識別符號來說明,從而使這個變數可以適應不同的資料型別。例如:
template
t fuc(t x, t y)
函式模板只是宣告了乙個函式的描述即模板,不是乙個可以直接執行的函式,只有根據實際情況用實參的資料型別代替型別引數識別符號之後,才能產生真正的函式。
(2)模板函式:
模板函式的生成就是將函式模板的型別形參例項化的過程。
例如:
double d;
int a;
fuc(d,a);
則系統將用實參d的資料型別double去代替函式模板中的t生成函式:
double fuc(double x,int y)
C 中 模板Template的使用
1 在c template中很多地方都用到了typename與class這兩個關鍵字,而且好像可以替換,是不是這兩個關鍵字完全一樣呢?答 class用於定義類,在模板引入c 後,最初定義模板的方法為 template,這裡class關鍵字表明t是乙個型別,後來為了避免class在這兩個地方的使用可能...
C 中template(模版)的使用
我們在程式設計的時候總是會遇到一些類似的模組,只是模組中的形參的資料型別不同,導致我們要不斷的去更改模組的。這裡就涉及到過載的知識點了。例如以下的幾種情況 函式1.int max int x,int y 函式2.float max float x,float y 函式3.double max dou...
C 中 模板Template的使用
類模板與模板類的概念 1.什麼是類模板 乙個類模板 也稱為類屬類或類生成類 同意使用者為類定義一種模式。使得類中的某些資料成員 默寫成員函式的引數 某些成員函式的返回值,能夠取隨意型別 包含系統提前定義的和使用者自己定義的 2.類模板定義 定義乙個類模板,一般有雙方面的內容 a.首先要定義類,其格式...