類模板類模板的使用
時間:2023-02-17 18:04:02 | 來源:營銷百科
時間:2023-02-17 18:04:02 來源:營銷百科
類模板類模板的使用:定義類模板的一般形式是:
template 類型名參數(shù)名1,類型名 參數(shù)名2,…
class 類名
{
類聲明體
};
例如,template class T
class Smemory
{…
public:
void input(T x);
…
}
表示定義一個名為Smemory的類模板,其中帶類型參數(shù)T。
在類模板的外部定義類成員函數(shù)的一般形式是:
template 類型名參數(shù)名1,類型名 參數(shù)名2,…
函數(shù)返回值類型 類名參數(shù)名 1 參數(shù)名 2,…::成員函數(shù)名(形參表)
{
函數(shù)體
}
例如:template class T
void SmemoryT::input(T x)
{…}
表示定義一個類模板Smemory的成員函數(shù),函數(shù)名為input,形參x的類型是T,函數(shù)無返回值。
類模板是一個類家族的抽象,它只是對類的描述,編譯程序不為類模板(包括成員函數(shù)定義)創(chuàng)建程序代碼,但是通過對類模板的實例化可以生成一個具體的類以及該具體類的對象。
與函數(shù)模板不同的是:函數(shù)模板的實例化是由編譯程序在處理函數(shù)調(diào)用時自動完成的,而類模板的實例化必須由程序員在程序中顯式地指定,
其實例化的一般形式是:
類名 數(shù)據(jù)類型 1(或數(shù)據(jù)),數(shù)據(jù)類型 2(或數(shù)據(jù))… 對象名
例如,Smemoryint mol;
表示將類模板Smemory的類型參數(shù)T全部替換成int 型,從而創(chuàng)建一個具體的類,并生成該具體類的一個對象mol。
類模板示例:類模板定義 定義一個類模板,一般有兩方面的內(nèi)容:
A. 首先要定義類,其格式為:
template class T //或用 templatetypename T
class foo
{
……
}
foo 為類名,在類定義體中,通用類型T可以作為普通成員變量的類型,還可以作為const和static成員變量以及成員函數(shù)的參數(shù)和返回類型之用。例如:
templateclass T
class Test{
private:
T n;
const T i;
static T cnt;
public:
Test():i(0){}
Test(T k);
~Test(){}
void print();
T operator (T x);
};
B. 在類定義體外定義成員函數(shù)時,若此成員函數(shù)中有模板參數(shù)存在,則除了需要和一般類的體外定義成員函數(shù)一樣的定義外,還需在函數(shù)體外進行模板聲明
例如
templateclass T
TestT::Test(T k):i(k){n=k;cnt ;}
如果函數(shù)是以通用類型為返回類型,則要在函數(shù)名前的類名后綴上'T' (注:所有函數(shù)都要加'T' )。例如:
templateclass T
T TestT::operator (T x){
return n x;
}
C. 在類定義體外初始化const成員和static成員變量的做法和普通類體外初始化const成員和static成員變量的做法基本上是一樣的,唯一的區(qū)別是需在對模板進行聲明,例如
templateclass T
int TestT::cnt=0;
templateclass T
TestT::Test(T k):i(k){n=k;cnt ;}