国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++從零開始的打怪升級之路(day12)

這篇具有很好參考價(jià)值的文章主要介紹了C++從零開始的打怪升級之路(day12)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

這是關(guān)于一個(gè)普通雙非本科大一學(xué)生的C++的學(xué)習(xí)記錄貼

在此前,我學(xué)了一點(diǎn)點(diǎn)C語言還有簡單的數(shù)據(jù)結(jié)構(gòu),如果有小伙伴想和我一起學(xué)習(xí)的,可以私信我交流分享學(xué)習(xí)資料

那么開啟正題

今天學(xué)習(xí)了關(guān)于模板的知識,下面展開分析

1.泛型編程

首先我們思考一個(gè)問題,如何是實(shí)現(xiàn)一個(gè)通用的交互函數(shù)呢

在C語言中,我們可能要定義實(shí)現(xiàn)幾個(gè)不同名稱的swap函數(shù),像這樣

void swap_int(int x1, int x2)
{...}
void swap_double(double x1, double x2)
{...}
void swap_char(char x1, char x2)
{...}

在C++中我們利用函數(shù)重載,可以方便一點(diǎn),像這樣

void swap(int x1, int x2)
{...}
void swap(double x1, double x2)
{...}
void swap(char x1, char x2)
{...}

但是重載的函數(shù)僅僅是類型不同,代碼復(fù)用率比較低,只要有新類型的出現(xiàn),又得增加函數(shù),很麻煩

于是,引出我們今天的主題:模板

模板就像告訴編譯器一個(gè)模子,讓編譯器根據(jù)類型的不同自己生成函數(shù)

隨著模板的引出,我們又不得不引出這樣的名詞:

泛型編程:編寫與類型無關(guān)的代碼,是代碼復(fù)用的一種手段,模板是泛型編程的基礎(chǔ)

2.函數(shù)模板

2.1函數(shù)模板概念

函數(shù)模板代表了一個(gè)函數(shù)家族,該函數(shù)模板與類型無關(guān),在使用時(shí)被參數(shù)化,根據(jù)實(shí)參類型產(chǎn)生函數(shù)的特定類型版本

2.2函數(shù)模板格式

template<typename T1,typename T2...>

返回類型 函數(shù)名(參數(shù)列表){}

(typename是用來定于模板參數(shù)的關(guān)鍵字,也可以用class替代,不能用struct

下面寫一個(gè)交換函數(shù)模板

template<class T>
void Swap(T& x1, T& x2)
{
	T x = x1;
	x1 = x2;
	x2 = x;
}

2.3函數(shù)模板的原理

函數(shù)模板是一個(gè)藍(lán)圖,它本身不是函數(shù),是編譯器用使用方式產(chǎn)生特定具體類型函數(shù)的模具,所以模板就是將本應(yīng)該我們做的重復(fù)的事情交給了編譯器

在編譯器編譯階段,對于模板函數(shù)的使用,編譯器需要根據(jù)傳入的實(shí)參類型來推演生成對應(yīng)類型的函數(shù)以供調(diào)用,比如當(dāng)double類型使用函數(shù)模板的時(shí)候,編譯器通過對實(shí)參類型的推演,將T確定為double類型,然后產(chǎn)生一份專門處理double類型的代碼,對于其他類型也是這樣

2.4函數(shù)模板的實(shí)例化

用不同類型的參數(shù)使用函數(shù)模板時(shí),稱為函數(shù)模板的實(shí)例化,函數(shù)模板的實(shí)例化分為隱式實(shí)例化和顯式實(shí)例化

1.隱式實(shí)例化

template<class T>
void Swap(T& x1, T& x2)
{
	T x = x1;
	x1 = x2;
	x2 = x;
}

int main()
{
	int a = 0;
	int b = 1;

	Swap(a, b);
	return 0;
}

這樣就是隱式實(shí)例化,編譯器會自動識別類型生成函數(shù)并調(diào)用,當(dāng)然如果b是double類型,我們可以在前面加上(int)強(qiáng)轉(zhuǎn)

2.顯式實(shí)例化

template<class T>
void Swap(T& x1, T& x2)
{
	T x = x1;
	x1 = x2;
	x2 = x;
}

int main()
{
	int a = 0;
	int b = 1;

	Swap<int>(a, b);
	return 0;
}

像這樣,在函數(shù)名后面的<>中指定模板參數(shù)的實(shí)際類型叫做顯式實(shí)例化

如果類型不匹配,編譯器會嘗試進(jìn)行隱式類型轉(zhuǎn)換,如果無法轉(zhuǎn)換成功編譯器就會報(bào)錯(cuò)

2.5模板參數(shù)匹配原則

1.一個(gè)非模板函數(shù)可以和一個(gè)同名的函數(shù)模板同時(shí)存在,而且該函數(shù)模板還可以被實(shí)例化為這個(gè)非模板函數(shù)

2.對于非模板函數(shù)和同名函數(shù)模板,如果其他條件都相同,在調(diào)動時(shí)會優(yōu)先調(diào)用非模板函數(shù)而不會從該模 板產(chǎn)生出一個(gè)實(shí)例。如果模板可以產(chǎn)生一個(gè)具有更好匹配的函數(shù), 那么將選擇模板

3.模板不允許自動類型轉(zhuǎn)化,但普通函數(shù)可以進(jìn)行自動類型轉(zhuǎn)換

template<class T>
T Add(T x, T y)
{
	return x + y;
}

int Add(int x, int y)
{
	return x + y;
}

int main()
{
	Add(0, 1);  // call   int Add(int x, int y)
	Add<int>(0, 1);  // call   T Add(T x, T y)
	return 0;
}

3.類模板

3.1類模板的定義格式

template<class T1,class T2...>
class? 類模板名
{
    //類內(nèi)成員定義
};

下面定義一個(gè)順序表作為演示

template<class T>
class Vector
{
public:
	Vector()
		:_a(nullptr)
		,_size(0)
		,_capacity(0)
	{}

	~Vector();

private:
	T* _a;
	size_t _size;
	size_t _capacity;
};

template<class T>  //注意在類外面類函數(shù)時(shí),需要加上模板參數(shù)列表
Vector<T>::~Vector()
{
	if (_a)
		free(_a);

	_size = _capacity = 0;
}

要注意的是,這里的Vector不是具體的類,而是模具

3.2類模板的實(shí)例化

類模板實(shí)例化與函數(shù)模板實(shí)例化不同,類模板實(shí)例化需要在模板名字后跟上<>,然后將實(shí)例化的類型放在<>中即可,類模板名字不是真正的類,而實(shí)例化的結(jié)果才是真正的類

Vector<int> v1;
Vector<double> v2;
//Vector類名  Vector<int>才是類型

總結(jié):模板幫我們解決了一些不必要的重復(fù)代碼,使后面的使用更加便捷,明天開始學(xué)SLT,模板也是對SLT的一個(gè)鋪墊

今天的博客就到這里了,后續(xù)內(nèi)容明天分享,最近因?yàn)榭荚囍茉虿荒芨绿鄡?nèi)容,等考試周結(jié)束了再"快馬加鞭"

新手第一次寫博客,有不對的位置希望大佬們能夠指出,也謝謝大家能看到這里,讓我們一起學(xué)習(xí)進(jìn)步吧?。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-813296.html

到了這里,關(guān)于C++從零開始的打怪升級之路(day12)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Android 開發(fā)--利用android studio 制作簡單文字打怪升級游戲(偽地牢類)1.開始

    Android 開發(fā)--利用android studio 制作簡單文字打怪升級游戲(偽地牢類)1.開始

    本人目前是大三考研黨,之前有學(xué)過一些雜七雜八的知識,但是沒有辦法利用這些知識制作一些真正有用的東西出來。后來自學(xué)了android開發(fā),學(xué)會使用了android studio,終于決定利用android studio 開發(fā)一個(gè)游戲出來,也算是我一直以來的夢想吧。但是由于制作水平有限,很多部分只

    2024年02月02日
    瀏覽(27)
  • [Linux打怪升級之路]-管道

    [Linux打怪升級之路]-管道

    前言 作者 : 小蝸牛向前沖 名言 : 我可以接受失敗,但我不能接受放棄 ??如果覺的博主的文章還不錯(cuò)的話,還請 點(diǎn)贊,收藏,關(guān)注??支持博主。如果發(fā)現(xiàn)有問題的地方歡迎?大家在評論區(qū)指正 本期學(xué)習(xí)目標(biāo):理解什么是管道,學(xué)會使用匿名管道和命名管道進(jìn)行通信 在學(xué)

    2024年02月08日
    瀏覽(25)
  • [Linux打怪升級之路]-文件操作

    [Linux打怪升級之路]-文件操作

    前言 作者: 小蝸牛向前沖 名言: 我可以接受失敗,但我不能接受放棄 如果覺的博主的文章還不錯(cuò)的話,還請 點(diǎn)贊,收藏,關(guān)注??支持博主。如果發(fā)現(xiàn)有問題的地方歡迎?大家在評論區(qū)指正。 目錄 一、認(rèn)識操縱系統(tǒng)下的文件 1、什么是文件 2、文件的類型 3、文件的共識

    2024年02月01日
    瀏覽(23)
  • [Linux打怪升級之路]-緩沖區(qū)

    [Linux打怪升級之路]-緩沖區(qū)

    前言 作者 : 小蝸牛向前沖 名言 : 我可以接受失敗,但我不能接受放棄 ? ?如果覺的博主的文章還不錯(cuò)的話,還請 點(diǎn)贊,收藏,關(guān)注??支持博主。如果發(fā)現(xiàn)有問題的地方歡迎?大家在評論區(qū)指正 ?本期學(xué)習(xí)目標(biāo):認(rèn)識什么是緩沖區(qū),緩沖區(qū)在哪里,模擬實(shí)現(xiàn)一個(gè)簡單的緩

    2024年02月07日
    瀏覽(26)
  • [Linux打怪升級之路]-system V共享內(nèi)存

    [Linux打怪升級之路]-system V共享內(nèi)存

    前言 作者 : 小蝸牛向前沖 名言 : 我可以接受失敗,但我不能接受放棄 ??如果覺的博主的文章還不錯(cuò)的話,還請 點(diǎn)贊,收藏,關(guān)注??支持博主。如果發(fā)現(xiàn)有問題的地方歡迎?大家在評論區(qū)指正 本期學(xué)習(xí)目標(biāo):認(rèn)識什么是?system V共享內(nèi)存,認(rèn)識共享內(nèi)存的接口函數(shù),學(xué)會

    2024年02月08日
    瀏覽(25)
  • [Linux打怪升級之路]-信號的保存和遞達(dá)

    [Linux打怪升級之路]-信號的保存和遞達(dá)

    前言 作者 : 小蝸牛向前沖 名言 : 我可以接受失敗,但我不能接受放棄 ? ?如果覺的博主的文章還不錯(cuò)的話,還請 點(diǎn)贊,收藏,關(guān)注??支持博主。如果發(fā)現(xiàn)有問題的地方歡迎?大家在評論區(qū)指正 目錄 一、信號的保存? 1、信號其他相關(guān)常見概念 2、信號在內(nèi)核中的表示 3、

    2024年02月05日
    瀏覽(24)
  • 【從零開始的rust web開發(fā)之路 一】axum學(xué)習(xí)使用

    第一章 axum學(xué)習(xí)使用 本職java開發(fā),兼架構(gòu)設(shè)計(jì)。空閑時(shí)間學(xué)習(xí)了rust,目前還不熟練掌握。想著用urst開發(fā)個(gè)web服務(wù),正好熟悉一下rust語言開發(fā)。 目前rust 語言web開發(fā)相關(guān)的框架已經(jīng)有很多,但還是和java,go語言比不了。 這個(gè)系列想完整走一遍web開發(fā),后續(xù)有時(shí)間就出orm,還

    2024年02月12日
    瀏覽(21)
  • Jeecg-Boot 低代碼開發(fā)平臺之路(一) —— 開始從零學(xué)起

    今天開始詳細(xì)學(xué)習(xí)下?Jeecg-Boot?低代碼開發(fā)平臺,官方網(wǎng)站對該平臺的介紹是如下。 JeecgBoot是一款基于BPM的低代碼平臺!前后端分離架構(gòu) SpringBoot 2.x,SpringCloud,Ant DesignVue,Mybatis-plus,Shiro,JWT,支持微服務(wù)。強(qiáng)大的代碼生成器讓前后端代碼一鍵生成,實(shí)現(xiàn)低代碼開發(fā)! Jee

    2023年04月08日
    瀏覽(367)
  • 【從零開始的rust web開發(fā)之路 二】axum中間件和共享狀態(tài)使用

    【從零開始的rust web開發(fā)之路 二】axum中間件和共享狀態(tài)使用

    第一章 axum學(xué)習(xí)使用 第二章 axum中間件使用 上篇文件講了路由和參數(shù)相應(yīng)相關(guān)的。axum還有個(gè)關(guān)鍵的地方是中間件的使用,這篇文件就來說說。 這個(gè)概念跟gin框架的中間件概念一樣,類似于springboot項(xiàng)目當(dāng)中的請求過濾器,在請求過來的時(shí)候鏈?zhǔn)綀?zhí)行一些操作。例如鑒權(quán),日志

    2024年02月11日
    瀏覽(21)
  • 【C++打怪之路Lv1】-- C++開篇(入門)

    【C++打怪之路Lv1】-- C++開篇(入門)

    ?? 個(gè)人主頁: 白子寰 ?? 分類專欄: C++打怪之路,python從入門到精通,魔法指針,進(jìn)階C++,C語言,C語言題集,C語言實(shí)現(xiàn)游戲 ?? 希望得到您的訂閱和支持~ ?? 堅(jiān)持創(chuàng)作博文(平均質(zhì)量分82+),分享更多關(guān)于深度學(xué)習(xí)、C/C++,python領(lǐng)域的優(yōu)質(zhì)內(nèi)容?。ㄏM玫侥年P(guān)注~) 目

    2024年04月23日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包