模板完全特化,函式過載的過載,類模板的繼承

2021-06-15 07:32:31 字數 3931 閱讀 4911

模板完全特化,函式過載的過載,類模板的繼承

模板用於對類或函式的定製。當模板的泛化處理不適合某個特定的資料型別時,可針對這個資料型別給出相應的模板,包括函式模板和類模板。

1、函式模板完全特化

函式模板完全特化是在函式模板定義後,再用關鍵字template<>

給出特定型別下的函式模板定義,表明它是乙個沒有任何泛化型別的完全特化模板。

#include

templatet>

voidfunc(t a

)

//函式模板完全特化

template<>

voidfunc(inta)

intmain(void)

2、類模板完全特化

類模板完全特化是在類模板定義後,再用關鍵字template<>

開頭,後跟類名及尖括號

<>

括起來給出的特定型別下的類模板定義。在特化的類模板中,甚至可以定義新的資料成員和成員函式。

#include

//類模板

atemplatet>

classa

t compute()

};

//類模板

a的完全特化

template<>classa//新增列印

intcompute()//改為立方計算

voidf(){}//新增新成員函式

};

intmain(void)

3、函式模板過載

提供了修改函式模板(

類成員函式模板

)的途徑,允許同名的函式模板,可以具有不同的返回值型別和形參型別。編譯器根據實際呼叫的函式引數進行相應的函式模板的選擇呼叫和具現。

#include

templatet>

voidfunc(t a

)

//函式模板的過載

templatet1,classt2>

intfunc(t1 t1

,t2 t2)

intmain(void)

4、類模板繼承

可以從乙個類模板(

基類模板

)繼承生成乙個新類模板。繼承類模板中可新增新的成員變數和成員函式,以實現類模板的擴充和修改。

#include

templatet>

classa

};

templatet1,classt2>

classb:publica<t1

>

};

intmain(void)

5、explicit

的作用explicit一般用來修飾建構函式。表示這個建構函式必須被顯式的呼叫,不能由編譯器進行隱式呼叫或用於做型別轉換。

引數的建構函式會在需要時被用作型別轉換函式,explicit

禁止了該建構函式用作型別轉換函式。如下所示:

class   a  

explicit與

virtual

、inline

合稱為「

函式限定符」,

它們只適用於建構函式。若乙個類擁有只帶乙個引數的建構函式,則可以使用   

myclass   object(x)   或   

myclass   object   =   x  

來初始化物件,這實際是進行了從引數型別到類型別的轉換。若在建構函式前加上限定符explicit

,將不再允許這種轉換,即不允許   

myclass   object   =   x   這種形式。

6.類模板的部分特化(partial specialization)(from c++ primer)

如果類模板有乙個以上的模板形參,我們也許想要特化某些模板形參而非全部。使用類模板的部分特化可以做到這一點:

template

class some_template;

//patial specialization:fixes t2 as int and allows t1 to vary

template

class some_template;

類模板的部分特化本身也是模板。部分特化 的定義看來像模板定義,這種定義以關鍵字template開頭,接著是由尖括號(<>)括住的模板形參表。部分特化的模板形參表是對應的類模板定義形參表的子集。

模板函式 過載 特化

見 12 3456 78910 1112 1314 1516 1718 1920 2122 2324 2526 2728 2930 3132 3334 3536 3738 3940 4142 4344 4546 4748 4950 5152 5354 5556 5758 5960 6162 6364...

巢狀過載以及模板特化

我在用c 實現乙個鏈式棧的時候,想利用其特性實現乙個 簡單 的過載,卻不料這個過載卻是如此的艱辛,我用的是vs2013,編譯器一直出現鏈結錯誤,我檢查了好久,認為沒有錯誤,而其中大有文章。如下 pragma once include include include using namespace s...

類模板的特化和函式模板的過載與類模板的繼承

類似於函式模板的特化,類模板的特化也是在類模板定義以後,用template來說明乙個模板的特化型別,特化的類模板甚至可以定義新的資料成員和成員函式,下面就是乙個類模板特化的例子 include template class a t compute template class a int compu...