58_類模板的概念和意義

關(guān)鍵詞:類模板

0.問題:在C++中是否能夠?qū)⒎盒偷乃枷霊?yīng)用與類?

類模板

1. 類模板

  • 一些類主要用于存儲(chǔ)和組織數(shù)據(jù)元素
  • 類中數(shù)據(jù)組織的方式和數(shù)據(jù)元素的具體類型無關(guān)
  • 如:數(shù)組類,鏈表類浇辜,Stack類飘弧,Queue類末秃,等

C++ 將模板的思想應(yīng)用于類玄坦,使得類的實(shí)現(xiàn)不關(guān)注數(shù)據(jù)元素的具體類型浸赫,而只關(guān)注類所需要實(shí)現(xiàn)的功能夸政。

2. C++中的類模板

作用:以相同的的方式處理不同的類型
語法規(guī)則:在類聲明前使用template進(jìn)行標(biāo)識元旬,<typename T>用于說明類中使用的泛型類型T

template < typename T >
class Operator
{
public:
    T op(T a, T b);
};

應(yīng)用:只能顯示指定具體類型,無法自動(dòng)推導(dǎo)守问,使用具體類型<type>定義對象

Operator<int> op1;
Operator<string> op2;

int i = op1.op(1, 2);
string s = op2.op("abc", "def");

3. 編譯器對類模板的處理方式

聲明的泛指類型T可以出現(xiàn)在類模板的任意地方匀归,作為一個(gè)合法的類型來使用
編譯器對類模板的處理方式和函數(shù)模板相同:
(1) 從類模板通過具體類型產(chǎn)生不同的類
(2) 在聲明的地方對類模板代碼本身進(jìn)行編譯
(3) 在使用的地方對參數(shù)替換后的代碼進(jìn)行編譯
編程說明:類模板初探

#include <iostream>
#include <string>

using namespace std;

template < typename T >
class Operator
{
public:
    T add(T a, T b)
    {
        return a + b;
    }
    T minus(T a, T b)
    {
        return a - b;
    }
    T multiply(T a, T b)
    {
        return a * b;
    }
    T divide(T a, T b)
    {
        return a / b;
    }
};

string operator -(string& l, string& r)
{
    return "string_minus";
}

int main()
{
    Operator<int> op1;
    Operator<string> op2;
    
    cout << op1.add(1, 2) << endl;
    cout << op2.add("abc", "def") << endl;
    cout << op2.minus("abc", "def") << endl;
}

輸出結(jié)果:

3
abcdef
string_minus

4. 類模板的工程應(yīng)用

  • 類模板必須在頭文件中定義
  • 類模板不能分開實(shí)現(xiàn)在不同的文件中
  • 類模板外部定義的成員函數(shù)需要加上模板<>聲明

編程說明:模板類的工程應(yīng)用
Operator.h

#ifndef _OPERATOR_H
#define _OPERATOR_H

template < typename T >
class Operator
{
public:
    T add(T a, T b);
    T minus(T a, T b);
    T multiply(T a, T b);
    T divide(T a, T b);
};

template < typename T >
T Operator<T>::add(T a, T b)
{
    return a + b;
}

template < typename T >
T Operator<T>::minus(T a, T b)
{
    return a - b;
}

template < typename T >
T Operator<T>::multiply(T a, T b)
{
    return a * b;
}

template < typename T >
T Operator<T>::divide(T a, T b)
{
    return a / b;
}

#endif

main.cpp

#include <iostream>
#include <string>
#include "Operator.h"

using namespace std;


int main()
{
    Operator<int> op1;
    Operator<string> op2;
    
    cout << op1.add(1, 2) << endl;
    cout << op2.add("abc", "def") << endl;
}

輸出結(jié)果

3
abcdef

5. 小結(jié)

  • 泛型編程的思想可以應(yīng)用于類
  • 類模板以相同的方式處理不同類型的數(shù)據(jù)
  • 類模板非常適用于編寫數(shù)據(jù)結(jié)構(gòu)相關(guān)的代碼
  • 類模板在使用時(shí)只能顯示指定類型
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市耗帕,隨后出現(xiàn)的幾起案子穆端,更是在濱河造成了極大的恐慌,老刑警劉巖仿便,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件体啰,死亡現(xiàn)場離奇詭異攒巍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)荒勇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門柒莉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人沽翔,你說我怎么就攤上這事兢孝。” “怎么了仅偎?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵跨蟹,是天一觀的道長。 經(jīng)常有香客問我哨颂,道長喷市,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任威恼,我火速辦了婚禮品姓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘箫措。我一直安慰自己腹备,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布斤蔓。 她就那樣靜靜地躺著植酥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪弦牡。 梳的紋絲不亂的頭發(fā)上友驮,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機(jī)與錄音驾锰,去河邊找鬼卸留。 笑死,一個(gè)胖子當(dāng)著我的面吹牛椭豫,可吹牛的內(nèi)容都是我干的耻瑟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼赏酥,長吁一口氣:“原來是場噩夢啊……” “哼喳整!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起裸扶,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤框都,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后呵晨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體魏保,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蔗蹋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了囱淋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片猪杭。...
    茶點(diǎn)故事閱讀 39,932評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖妥衣,靈堂內(nèi)的尸體忽然破棺而出皂吮,到底是詐尸還是另有隱情,我是刑警寧澤税手,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布蜂筹,位于F島的核電站,受9級特大地震影響芦倒,放射性物質(zhì)發(fā)生泄漏艺挪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一兵扬、第九天 我趴在偏房一處隱蔽的房頂上張望麻裳。 院中可真熱鬧,春花似錦器钟、人聲如沸津坑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疆瑰。三九已至,卻和暖如春昙啄,著一層夾襖步出監(jiān)牢的瞬間穆役,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工梳凛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留耿币,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓伶跷,卻偏偏與公主長得像掰读,于是被迫代替她去往敵國和親秘狞。 傳聞我的和親對象是個(gè)殘疾皇子叭莫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評論 2 354

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)烁试,斷路器雇初,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,129評論 25 707
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,811評論 6 342
  • 1 再次見到王璇的時(shí)候靖诗,她已經(jīng)從大學(xué)時(shí)的假小子搖身一變成了長發(fā)飄飄郭怪、前凸后翹的某公司高級主管。 要不是她主動(dòng)向我打...
    李小狼不狼閱讀 8,515評論 184 314
  • 世界上最遠(yuǎn)的距離是分開后刊橘,一個(gè)人已經(jīng)向前走了鄙才,而另一個(gè)人還等在原地,所有的不能在一起一定是不夠愛吧. “對象就是知...
    程十八閱讀 229評論 0 1