C++提供了多種代碼重用機制,在前面介紹派生和繼承時,派生類可以繼承基類中的成員變量和成員函數(shù)。模板是另一種代碼重用機制。
創(chuàng)新互聯(lián)建站專注于布爾津網(wǎng)站建設(shè)服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供布爾津營銷型網(wǎng)站建設(shè),布爾津網(wǎng)站制作、布爾津網(wǎng)頁設(shè)計、布爾津網(wǎng)站官網(wǎng)定制、小程序制作服務,打造布爾津網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供布爾津網(wǎng)站排名全網(wǎng)營銷落地服務。有時候在設(shè)計程序的時候會遇到這樣一種情況:需要設(shè)計的幾個類,其功能都是一樣的,僅僅只是需要操作的數(shù)據(jù)類型不同。遇到這樣的情況,固然可以將所有的類都設(shè)計一遍,但是在C++中,我們有更好的方法:設(shè)計一個模板類。假設(shè)我們需要創(chuàng)建一個數(shù)組類,該數(shù)組可能是整型數(shù)組,也可能是double類型數(shù)組、string類型數(shù)組等,為此我們需要設(shè)計一個數(shù)組的模板類。
例1:
template< class T >
class array
{
public:
array( int );
T & operator;
const T & operator[] ( int )const;
int getlen()const{ return length; }
~array();
private:
array(){};
int length;
T * num;
};
template < class T >
array< T >::array( int n )
{
num = new T[n];
length = n;
}
template < class T >
array< T >::~array()
{
delete[] num;
}
template< class T >
T & array< T > ::operator[] (int i)
{
if( i < 0 || i >= length)
throw string("out of bounds");
return num[i];
}
template< class T >
const T & array< T > ::operator[] (int i) const
{
if( i < 0 || i >= length)
throw string("out of bounds");
return num[i];
}
template< class T >
ostream & operator<<(ostream & out, const array <T> & A)
{
for(int i=0; i < A.getlen(); i++)
out<< A[i] << " ";
return out;
}
在本例中,我們定義了一個數(shù)組的模板類array,借用該示例,我們來了解一下模板類的一些基本語法。在本例中我們定義模板類array時,前面加上了一句聲明:
template< class T >
該語句稱為模板頭,可以單獨放在一行,也可以與后面的class array同放在一行,這都沒有關(guān)系。模板頭中的“T”我們稱之為類參數(shù),類參數(shù)表示將會以確定的數(shù)據(jù)類型替代之,任何有效的C++標識符均可以作為類參數(shù),當然通常我們還是會用“T”來做類參數(shù)。
模板頭中template關(guān)鍵字和“<”之間可以保留一個空格,但通常這兩者之間不留空格。
對于模板類而言,在類外定義類中的成員函數(shù)的時候都需要加上模板頭。同時由于array是個模板類,因此類名是array< T >,故而在類外定義帶參構(gòu)造函數(shù)的完×××式是:
template < class T >
T & array< T >::array( int n )
{
num = new T[n];
length = n;
}
而如果是在類內(nèi)部定義該函數(shù),則會相對簡單一些:
array( int n )
{
num = new T[n];
length = n;
}
在本例中用到了前面所介紹的很多知識點,例如將默認構(gòu)造函數(shù)置為private屬性,重載下標操作符,重載輸出操作符等,這些知識點希望能夠仔細領(lǐng)會。
模板類至少有一個類參數(shù),但是可以有多個類參數(shù),每一個類參數(shù)前都必須有關(guān)鍵字class或者類型名。
例2:
template< class T, class S, class R>
class test
{
public:
S fun( R r);
private:
T x;
};
本例就是一個具有多個類參數(shù)的模板類示例。
轉(zhuǎn)載請注明出處: 1688
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網(wǎng)頁名稱:什么是C++標準模板庫(STL)的概念-創(chuàng)新互聯(lián)
當前鏈接:http://jinyejixie.com/article4/dcheoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、做網(wǎng)站、網(wǎng)站建設(shè)、軟件開發(fā)、移動網(wǎng)站建設(shè)、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容