C++基礎(chǔ)學(xué)習(xí)筆記(六):函數(shù)模板和類(lèi)模板

函數(shù)模板

在C++程序中疙渣,經(jīng)常能看到以 template<class T> 等形式的語(yǔ)句,這其實(shí)就是應(yīng)用了模板的知識(shí)叙赚,在C++中梨水,凡是出現(xiàn)了類(lèi)似的語(yǔ)句拭荤,我們都可以認(rèn)為是一種泛型化的編程,所謂泛型編程疫诽,就是指不再拘泥于某種特定類(lèi)型的變量來(lái)編寫(xiě)函數(shù)或類(lèi)舅世,而是隨著程序的需求,來(lái)自動(dòng)轉(zhuǎn)換成為程序需要的類(lèi)型奇徒,比如編寫(xiě)一個(gè)交換兩數(shù)的函數(shù)雏亚,不確定要交換的是兩個(gè)整形數(shù)還是兩個(gè)double型數(shù)據(jù),在這種情況下摩钙,就可以使用模板罢低,等到程序確定了要交換何種類(lèi)型的變量時(shí),再根據(jù)相應(yīng)情況轉(zhuǎn)換胖笛,如下所示:

template <class T>
void Swap(T x, T y)
{
    T tmp = x;
    x = y;
    y = tmp;
}

首先网持,模板原型如下所示:

template <class 類(lèi)型參數(shù)名>   //class 可用 typename 替換

在上個(gè)函數(shù)中,T 就成為了這里的類(lèi)型參數(shù)名长踊,在實(shí)際應(yīng)用時(shí)翎碑,如果 x 和 y 賦為 int 型,那么 T 就被轉(zhuǎn)換成 int 型之斯。
下面是返回?cái)?shù)組最大元素的函數(shù):

template <class T>
T FindMaxNum(T a[],int size)
{
    T MaxNUm = a[0];
    for(int i = 1;i < size; ++i)
        if(MaxNUm < a[i])
            MaxNUm = a[i];
    return MaxNUm;
}

當(dāng)然,模板也可以有不同的類(lèi)型參數(shù)遣铝,比如:

template <class T1,class T2>

這樣可以有效避免參數(shù)類(lèi)型的二義性佑刷。
值得注意的一點(diǎn)是,函數(shù)模板是可以重載的酿炸,只要形參表不同即可瘫絮。
在學(xué)習(xí)C++的基礎(chǔ)課程時(shí),遇到了這么一個(gè)知識(shí)點(diǎn)填硕,如果程序調(diào)用了一個(gè)函數(shù)麦萤,編譯器將按照以下順序去匹配相應(yīng)的函數(shù)原型:

Step 1:尋找參數(shù)完全匹配的普通函數(shù)(即不是由模板實(shí)例化得到的函數(shù))
Step 2:尋找參數(shù)完全匹配的模板函數(shù)
Step 3:尋找實(shí)參經(jīng)過(guò)自動(dòng)類(lèi)型轉(zhuǎn)換后能夠匹配的普通函數(shù)
Step 4:上面的都無(wú)法匹配鹿鳖,則報(bào)錯(cuò)

類(lèi)模板

類(lèi)模板的使用方法與函數(shù)模板相差不大,但也有區(qū)別壮莹,類(lèi)模板要考慮的東西會(huì)更多翅帜,首先來(lái)看一下類(lèi)模板的聲明:

template <class 類(lèi)型參數(shù)1, 類(lèi)型參數(shù)2, ......>
class 類(lèi)模板名
{
         成員函數(shù)和成員變量
};

如果成員函數(shù)在類(lèi)模板的外面定義時(shí),要寫(xiě)成如下格式:

template 型參數(shù)表
返回值類(lèi)型 類(lèi)模板名<類(lèi)型參數(shù)名列表>::成員函數(shù)名(參數(shù)表)
{
    ......
}

以下是一個(gè)實(shí)例:

#include <iostream>

using namespace std;

template<class T>
class Square
{
public:
    T SideLength;
    void input(T a);
    void output(void);
};

int main()
{
    Square<int> square;    //寫(xiě)出參數(shù)類(lèi)型
    square.input(5);
    square.output();
    return 0;
}

template<class T>
void Square<T>::input(T a)    //成員函數(shù)寫(xiě)在外部時(shí)命满,要遵循這個(gè)格式
{
    SideLength = a;
}

template<class T>
void Square<T>::output(void)
{
    T a = SideLength;
    cout << a*a << endl;
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末涝滴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子胶台,更是在濱河造成了極大的恐慌歼疮,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诈唬,死亡現(xiàn)場(chǎng)離奇詭異韩脏,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)铸磅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)赡矢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人愚屁,你說(shuō)我怎么就攤上這事济竹。” “怎么了霎槐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵送浊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我丘跌,道長(zhǎng)袭景,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任闭树,我火速辦了婚禮耸棒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘报辱。我一直安慰自己与殃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布碍现。 她就那樣靜靜地躺著幅疼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪昼接。 梳的紋絲不亂的頭發(fā)上爽篷,一...
    開(kāi)封第一講書(shū)人閱讀 51,245評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音慢睡,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛趟庄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播棕硫,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼窘俺!你這毒婦竟也來(lái)了饲帅?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瘤泪,失蹤者是張志新(化名)和其女友劉穎灶泵,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體对途,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赦邻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了实檀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惶洲。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖膳犹,靈堂內(nèi)的尸體忽然破棺而出恬吕,到底是詐尸還是另有隱情,我是刑警寧澤须床,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布铐料,位于F島的核電站,受9級(jí)特大地震影響豺旬,放射性物質(zhì)發(fā)生泄漏钠惩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一族阅、第九天 我趴在偏房一處隱蔽的房頂上張望篓跛。 院中可真熱鬧,春花似錦坦刀、人聲如沸愧沟。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)央渣。三九已至,卻和暖如春渴频,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背北启。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工卜朗, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拔第,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓场钉,卻偏偏與公主長(zhǎng)得像蚊俺,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子逛万,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容