**出處:
有時候在設計程式的時候會遇到這樣一種情況:需要設計的幾個類,其功能都是一樣的,僅僅只是需要操作的資料型別不同。遇到這樣的情況,固然可以將所有的類都設計一遍,但是在c++中,我們有更好的方法:設計乙個模板類。假設我們需要建立乙個陣列類,該陣列可能是整型陣列,也可能是double型別陣列、string型別陣列等,為此我們需要設計乙個陣列的模板類。
template< class t >
class array
~array();
private:
array(){};
int length;
t * num;
};template < class t >
array< t >::array( int n )
template < class t >
array< t >::~array()
template< class t >
t & array< t > ::operator (int i)
template< class t >
const t & array< t > ::operator (int i) const
template< class t >
ostream & operator<<(ostream & out, const array & a)
template< class t >
該語句稱為
模板頭,可以單獨放在一行,也可以與後面的class array同放在一行,這都沒有關係。模板頭中的「t」我們稱之為
類引數,類引數表示將會以確定的資料型別替代之,任何有效的c++識別符號均可以作為類引數,當然通常我們還是會用「t」來做類引數。
類模板是對類的抽象 目的是為了實現**重用 對那些設計**的過程實現步驟基本一樣 的相似的類 抽象出來 到用的時候再傳具體的類
注意區別:
類外:
template < class t >
t & array< t >::array( int n )
類內:
array( int n )
模板類至少有乙個類引數,但是可以有多個類引數,每乙個類引數前都必須有關鍵字class或者型別名。
template< class t, class s, class r>
class test
;
類模板的例項化
array < int >表明用int型別來代替模板類中的類引數「t」,編譯器會將模板類array中所有的類引數t都用int來代替。例如類中的私有成員變數「t * num;」會被替換為「int * num;」。對類中的成員函式也會進行相同的替換,如「t & operator( int );」將會被替換為「int & operator( int );」。
#include using namespace std;
template< class t >
class array
~array();
private:
array(){};
int length;
t * num;
};template < class t >
array< t >::array( int n )
template < class t >
array< t >::~array()
template< class t >
t & array< t > ::operator ( int i )
template< class t >
const t & array< t > ::operator (int i) const
template< class t >
ostream & operator<<( ostream & out, const array & a )
int main()
cout<「array< int > a(10);」例項化之後建立了乙個物件a,該物件是乙個包含10個元素的整型陣列。之後用乙個for迴圈給陣列賦初值,由於我們過載了下標操作符,因此可以憑藉下標直接訪問相應的陣列元素。之後直接輸出a陣列的所有元素,此時呼叫的是輸出操作符過載函式。
另外模板類可以以引數的形式出現在函式的引數列表中,例如例1中的輸出操作符過載函式「template< class t > ostream & operator<<(ostream & out, const array & a)」,該函式的第二引數是array 的引用,如果引數列表中有模板類,則函式前面必須加上模板頭,在例1中的模板頭為「template< class t >」。
C 學習筆記 標準模板庫STL string
string s hello cout 成員函式at 會做範圍檢查,如果超出範圍,會丟擲out of range異常,而下標運算子不會做範圍檢查。vector的遍歷方式後面再提。string s1 good s2 morning good morning morning d 如果3 s1.size ...
C 學習筆記 STL(標準模板庫)
1 首先 需要學習c 模板的概念 2 c stl 標準模板庫 是一套功能強大的 c 模板類,提供了通用的模板類和函式,這些模板類和函式可以實現多種流行和常用的演算法和資料結構,如向量 鍊錶 佇列 棧。3 c 標準模板庫的核心包括以下三個元件 元件描述 容器 containers 容器是用來管理某一類...
C 標準模板庫(一)
之前學習自定義模板時覺得自定義模板比較抽象,使用起來較為繁瑣。作為c 標準庫相當重要的一部分,stl庫提供一系列元件操作。為我們解決了這個問題。標準模板庫stl包括容器 迭代器 演算法 容器指包含資料的資料結構,容器中包含的物件是元素 迭代器指用來訪問容器中的元素物件,相當於元素物件的指標 演算法指...