最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++超詳細(xì)介紹模板

 更新時(shí)間:2022年07月07日 10:31:17   作者:幻荼  
人們需要編寫多個(gè)形式和功能都相似的函數(shù),因此有了函數(shù)模板來(lái)減少重復(fù)勞動(dòng);人們也需要編寫多個(gè)形式和功能都相似的類,于是 C++ 引人了類模板的概念,編譯器從類模板可以自動(dòng)生成多個(gè)類,避免了程序員的重復(fù)勞動(dòng)

定義

函數(shù)模板不是一個(gè)實(shí)在的函數(shù),編譯器不能為其生成可執(zhí)行代碼。定義函數(shù)模板后只是一個(gè)對(duì)函數(shù)功能框架的描述,當(dāng)它具體執(zhí)行時(shí),將根據(jù)傳遞的實(shí)際參數(shù)決定其功能。

一個(gè)程序一般是經(jīng)過(guò)預(yù)處理——>編譯——>匯編——>鏈接。但是因?yàn)槌绦驘o(wú)法知道模板的具體類型(int,double),所以無(wú)法進(jìn)行預(yù)處理,也就不能生成可執(zhí)行代碼。

例子

下面我們來(lái)看一個(gè)例子

我們?cè)趯W(xué)習(xí)c語(yǔ)言的時(shí)候,當(dāng)我們需要交換兩個(gè)數(shù),我們是這樣做的

交換整數(shù)

void Swap(int & x, int & y)
{
    int tmp = x;
    x = y;
    y = tmp;
}

交換小數(shù)

void Swap (double & xr double & y)
{
    double tmp = x;
    x = y;
    y = tmp;
}

我們可以看出,只要類型做了變化,我們就需要重新寫一個(gè)幾乎不變的代碼,這是非常不方便的。

那么我們像活字印刷術(shù)一樣做一個(gè)模板出來(lái)讓編譯器根據(jù)自行推導(dǎo)類型呢?

于是模板就出現(xiàn)了。

對(duì)于上面的情況,我們模板是這樣處理的。

格式

template <class T>
void Swap(T & x, T & y)
{
    T tmp = x;
    x = y;
    y = tmp;
}
template <class T>
void Swap(T& x, T& y)
{
	T tmp = x;
	x = y;
	y = tmp;
}
int main()
{
	int a = 3;
	int b = 2;
	Swap(a, b);
	cout << a << endl<< b << endl;
	return 0;
}

template <class 類型參數(shù)1, class類型參數(shù)2, ...>
返回值類型  模板名(形參表)
{
    函數(shù)體
}

意識(shí)就是說(shuō),我們?cè)谶@里用template定義了一個(gè)模板”T”,當(dāng)我們使用Swap的時(shí)候,計(jì)算機(jī)根據(jù)我們a,b(都是int)的類型,推出T應(yīng)當(dāng)是int 型。

實(shí)際上這個(gè)

void Swap(T & x, T & y)

變成了

void Swap (int & x, int & y)

但是需要注意,只有當(dāng)a,b都是同類型的時(shí)候,計(jì)算機(jī)才能自動(dòng)推到,如果是不同類型,我們將b換為double類型

template <class T>
void Swap(T & x, T & y)
{
    T tmp = x;
    x = y;
    y = tmp;
}
template <class T>
void Swap(T& x, T& y)
{
	T tmp = x;
	x = y;
	y = tmp;
}
int main()
{
	int a = 3;
	double b = 2.5;
	Swap(a, b);
	cout << a << endl<< b << endl;
	return 0;
}

就會(huì)出現(xiàn):

因?yàn)閮蓚€(gè)數(shù)一個(gè)int一個(gè)double,計(jì)算機(jī)就不知道給這個(gè)T賦int 還是double,這個(gè)時(shí)候有兩種處理方法

處理方法

第一種隱式實(shí)例化:讓編譯器根據(jù)實(shí)參推演模板參數(shù)的實(shí)際類型

#include<iostream>
using namespace std;
template<class T>
T Add(const T& left, const T& right)
{
	return left + right;
}
int main()
{
	int a1 = 10, a2 = 20;
	double d1 = 10.0, d2 = 20.5;
	Add<int>(a1, d2);//在這個(gè)地方前面加<int>,計(jì)算機(jī)就會(huì)默認(rèn)T為int型
}

第二種顯式實(shí)例化:在函數(shù)名后的<>中指定模板參數(shù)的實(shí)際類型

#include<iostream>
using namespace std;
template<class T>
T Add(const T& left, const T& right)
{
	return left + right;
}
int main()
{
	int a1 = 10, a2 = 20;
	double d1 = 10.0, d2 = 20.5;
	Add(a1,(int) d2);//此處d2原本是double型,但是我們強(qiáng)制轉(zhuǎn)換為int之后,兩者的類型都相同,計(jì)算機(jī)就能自動(dòng)推導(dǎo)了
}

到此這篇關(guān)于C++超詳細(xì)介紹模板的文章就介紹到這了,更多相關(guān)C++模板內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++趣味算法之偵探推理

    C++趣味算法之偵探推理

    本文詳細(xì)講解了C++趣味算法之偵探推理,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • C及C++?基礎(chǔ)循環(huán)示例詳解

    C及C++?基礎(chǔ)循環(huán)示例詳解

    這篇文章主要介紹了C及C++?中的循環(huán)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 淺談c和c++的某些小區(qū)別

    淺談c和c++的某些小區(qū)別

    下面小編就為大家?guī)?lái)一篇淺談c和c++的某些小區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • 聊一聊OpenCV相機(jī)標(biāo)定

    聊一聊OpenCV相機(jī)標(biāo)定

    這篇文章主要為大家詳細(xì)介紹了OpenCV相機(jī)標(biāo)定的相關(guān)資料,即獲得相機(jī)參數(shù)的過(guò)程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C語(yǔ)言創(chuàng)建鏈表錯(cuò)誤之通過(guò)指針參數(shù)申請(qǐng)動(dòng)態(tài)內(nèi)存實(shí)例分析

    C語(yǔ)言創(chuàng)建鏈表錯(cuò)誤之通過(guò)指針參數(shù)申請(qǐng)動(dòng)態(tài)內(nèi)存實(shí)例分析

    這篇文章主要介紹了C語(yǔ)言創(chuàng)建鏈表錯(cuò)誤之通過(guò)指針參數(shù)申請(qǐng)動(dòng)態(tài)內(nèi)存,是鏈表創(chuàng)建過(guò)程中非常常見(jiàn)的經(jīng)典錯(cuò)誤。實(shí)例中做了較為詳盡的分析,需要的朋友可以參考下
    2014-09-09
  • VC++實(shí)現(xiàn)模擬漢諾塔效果

    VC++實(shí)現(xiàn)模擬漢諾塔效果

    本文給大家分享的是一則使用vc++實(shí)現(xiàn)模擬漢諾塔效果的代碼,代碼實(shí)現(xiàn)起來(lái)很簡(jiǎn)單,主要是漢諾塔算法的思路要正確,正在練習(xí)漢諾塔的小伙伴也可以來(lái)看看,希望大家能夠喜歡。
    2015-03-03
  • C++ pair的基本用法總結(jié)整理

    C++ pair的基本用法總結(jié)整理

    這篇文章主要介紹了C++ pair的基本用法總結(jié)整理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • OpenCV實(shí)現(xiàn)直線檢測(cè)并消除

    OpenCV實(shí)現(xiàn)直線檢測(cè)并消除

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)直線檢測(cè)并消除,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 最新評(píng)論

    西盟| 长宁县| 连南| 平顶山市| 卢湾区| 定安县| 三穗县| 景洪市| 陆良县| 三门县| 革吉县| 高安市| 宁夏| 佛坪县| 紫阳县| 台安县| 扎兰屯市| 土默特左旗| 长兴县| 冀州市| 来宾市| 康马县| 囊谦县| 泰和县| 平乐县| 姚安县| 密山市| 仙居县| 盘山县| 滨海县| 肇东市| 和林格尔县| 保山市| 朝阳区| 高淳县| 杭锦旗| 基隆市| 前郭尔| 贵南县| 临漳县| 楚雄市|