C 基礎 模板引數與模板繼承

2021-10-18 23:06:54 字數 1763 閱讀 2121

函式引數可以設定乙個預設值,我們現在可以對類模板的型別引數設定乙個預設型別。

指定泛型stack的預設型別引數為 int

template

<

typename t =

int>

class

stack

;

當我們這樣定義乙個物件時:

stack<

> stack;

使用預設的方式,或者說隱式的方式,例項化了乙個stack物件。

這樣的好處是:指定預設型別之後,使用者就沒必要去寫了。

在模板字首中使用非型別引數。

例項化模板時,非型別實參應該是物件。

如下:

template

<

typename t,

int capacity>

class

stack

;stack<

char

,100

> charstack;

如同std裡面的array的初始化:std::array;除了基本資料型別外,非型別實參是物件的時候是這樣的;

template

<

typename t, color c>

class

label

;color color(0

,0,255);

label<

char

,color> label;

注意,引數預設值必須是在最右邊,當然我們也可以全部定義乙個預設值,這樣就不會有問題了。

注意模板成員函式的宣告也需要進行修改。

就是這樣:

//泛型化

template

<

typename t =

char

,int n =

100>

//編寫stackofintegers類

class

stack

;public

:bool

empty()

; t peek()

; t push

(t value)

; t pop()

;int

getsize()

;stack()

;};template

<

typename t,

int n>

stack

::stack()

}

關於模板繼承的幾個原則:

1、普通類可從類模板例項繼承。乙個模板例項化之後就是乙個類了,類與類之間可以繼承。

2、模板可從普通類繼承

3、類模板可繼承類模板

也就是說,乙個類是不可以從乙個模板繼承的,其他的三種組合方式都是可以的。

使用別人寫好的模板庫時

對不同型別的資料做類似處理 (演算法、容器、遍歷等)

泛型程式設計在c++中廣泛使用,經常可以取代物件導向程式設計。

幾乎整個c++標準庫都依賴於泛型程式設計。

在c++標準庫較少使用繼承和執行時多型。異常、字串和io流中使用了較多的繼承。

C 模板 函式模板 類模板 模板與繼承

c 提供一種模板的機制來減少 重複。比如 對於同一樣函式使用不同的資料型別,int,double,char等。c 模板屬於 元程式設計 的範疇。1.支援不同資料型別的函式過載 cpp view plain copy include using namespace std int square int...

C 模板 函式模板 類模板 模板與繼承

2013 09 13 23 09 28054人閱讀收藏 舉報 c c stl 泛型程式設計 64 目錄 c 提供一種模板的機制來減少 重複。比如 對於同一樣函式使用不同的資料型別,int,double,char等。c 模板屬於 元程式設計 的範疇。1.支援不同資料型別的函式過載 cpp view p...

C 模板 函式模板 類模板 模板與繼承

原文 c 模板 描述 c 提供一種模板的機制來減少 重複。比如 對於同一樣函式使用不同的資料型別,int,double,char等。c 模板屬於 元程式設計 的範疇。c 模板函式 1.支援不同資料型別的函式過載 include using namespace std int square int x...