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

c++分離講解模板的概念與使用

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

泛類(lèi)編程

學(xué)習(xí)模板,首先我們需要了解一下什么是泛類(lèi)編程

#include<iostream>
using namespace std;
int add(int a, int b)
{
	return a + b;
}
double add(double a, double b)	//這兩個(gè)add構(gòu)成了函數(shù)重載
{
	return a + b;
}
int main()
{
	int a = 1;
	int b = 2;
	double c = 3;
	double d = 4;
	cout << add(a, b) << endl;	
	cout << add(c, d) << endl;	
	//假如我們想要實(shí)現(xiàn)不同類(lèi)型變量的相加,可以創(chuàng)建不同的函數(shù),構(gòu)成函數(shù)重載來(lái)分別調(diào)用不同的函數(shù)
	return 0;
}

我們可以使用c++的函數(shù)重載來(lái)解決這個(gè)問(wèn)題,但是函數(shù)重載本身就存在問(wèn)題

1、函數(shù)重載僅僅類(lèi)型不同,假如出現(xiàn)了新的類(lèi)型,我們就需要重新寫(xiě)新的函數(shù)重載,代碼的利用率低

2、代碼可維護(hù)性低,一個(gè)出錯(cuò)可能會(huì)導(dǎo)致所有函數(shù)重載出錯(cuò)

泛型編程:編寫(xiě)與類(lèi)型無(wú)關(guān)的通用代碼,是代碼復(fù)用的一種手段

所以c++提供了一種模板來(lái)解決這個(gè)問(wèn)題

模板本質(zhì)上:本來(lái)應(yīng)該由你寫(xiě)的代碼,然后不想重復(fù)寫(xiě),你給了一個(gè)模板,編譯器通過(guò)模板,幫你生成了對(duì)應(yīng)的代碼

函數(shù)模板

函數(shù)模板的概念

函數(shù)模板代表了一個(gè)函數(shù)家族,該函數(shù)模板與實(shí)參無(wú)關(guān),當(dāng)函數(shù)被使用時(shí)候會(huì)被實(shí)參初始化,從而產(chǎn)生不同的函數(shù)類(lèi)型

函數(shù)模板的使用

函數(shù)模板的格式:

template<typename T1, typename T2, ......, typename Tn>	//函數(shù)模板的參數(shù)不止一個(gè),可以有很多參數(shù)
//返回值類(lèi)型 函數(shù)名(參數(shù)列表) {}

函數(shù)模板的使用: 

template<typename T>	//也可以用<class T>,效果和<typename T>一樣,但是不能用struct
T add(T x, T y)
{
	return x + y;
}

注意:typename是函數(shù)模板的關(guān)鍵字,也可以使用class,但是不能使用struct

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

當(dāng)我們用不同的參數(shù)使用函數(shù)模板時(shí),就稱為函數(shù)模板的初始化

函數(shù)模板的實(shí)例化有兩種:

1、隱式實(shí)例化(讓編譯器根據(jù)實(shí)參推演模板參數(shù)的實(shí)際類(lèi)型)

#include<iostream>
using namespace std;
template<typename T>	
T add(T x, T y)
{
	return x + y;
}
int main()
{
	int a = 1, b = 2;
	double c = 3, d = 4;
	cout << add(a, b) << endl;	//使用了隱式實(shí)例化,由編譯器自動(dòng)推演實(shí)例化參數(shù)類(lèi)型
	return 0;
}

2. 顯式實(shí)例化(在函數(shù)名后的<>中指定模板參數(shù)的實(shí)際類(lèi)型)

#include<iostream>
using namespace std;
template<typename T>	
T add(T x, T y)
{
	return x + y;
}
int main()
{
	int a = 1, b = 2;
	double c = 3, d = 4;
	cout << add<int>(a, c) << endl;	
	//由于a和c的類(lèi)型不同,所以我們必須使用顯示實(shí)例化,即函數(shù)名后面<type>括號(hào)中加上你想要實(shí)例化的類(lèi)型
	return 0;
}

函數(shù)模板的匹配原則

1、模板模板可以和一個(gè)同名非函數(shù)模板同時(shí)存在 

2、假如模板函數(shù)和非模板函數(shù)同名,編譯器會(huì)選擇一個(gè)更匹配的類(lèi)型進(jìn)行使用

#include<iostream>
using namespace std;
int add(int x, int y)
{
	return x + y;
}
template<typename T>	
T add(T x, T y)
{
	return x + y;
}
int main()
{
	int a = 1, b = 2;
	double c = 3, d = 4;
	cout << add(a, b) << endl;	//因?yàn)閍,b是整型,所以會(huì)調(diào)用非函數(shù)模板,因?yàn)橛卸际钦蛥?shù)的非函數(shù)模板
	return 0;
}

3、模板函數(shù)不允許自動(dòng)類(lèi)型轉(zhuǎn)換,但普通函數(shù)可以進(jìn)行自動(dòng)類(lèi)型轉(zhuǎn)換

#include<iostream>
using namespace std;
template<typename T>	
T add(T x, T y)
{
	return x + y;
}
int main()
{
	int a = 1, b = 2;
	double c = 3, d = 4;
	cout << add(a, (int)c) << endl;	
	return 0;
}

假如我們要使用函數(shù)模板的add,需顯示實(shí)例化add,或者將c強(qiáng)制類(lèi)型轉(zhuǎn)換,函數(shù)模板不會(huì)自動(dòng)轉(zhuǎn)換,因?yàn)樗恢酪绾无D(zhuǎn)換的

類(lèi)模板

類(lèi)模板的定義格式

類(lèi)模板的定義格式:

template<class T1, class T2, ..., class Tn>
class 類(lèi)模板名
{
// 類(lèi)內(nèi)成員定義
};
template<class T>	//創(chuàng)建類(lèi)模板
class Date
{
public:
	void init();
private:
	int _year;
};
template<class T>	//假如我們需要在類(lèi)模板的類(lèi)外面定義函數(shù),需要添加模板列表
Date<int>init()	//還需要在類(lèi)名后面<>中添加模板參數(shù)列表
{
	_year = 0;
}

類(lèi)模板的實(shí)例化

//Date是類(lèi)名,Date<int>是類(lèi)型
Date<int> d;	//類(lèi)模板的實(shí)例化需要在類(lèi)模板名的后面<>中添加想要實(shí)例化的類(lèi)型

到此這篇關(guān)于c++分離講解模板的概念與使用的文章就介紹到這了,更多相關(guān)c++模板內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言隊(duì)列和應(yīng)用詳情

    C語(yǔ)言隊(duì)列和應(yīng)用詳情

    這篇文章主要介紹了C語(yǔ)言隊(duì)列和應(yīng)用詳情,文章將讓大家掌握掌握隊(duì)列的原理和作用、掌握隊(duì)列的寫(xiě)法、掌握隊(duì)列在產(chǎn)品中的應(yīng)用,需要的朋友可以參考一下
    2022-03-03
  • c++ chrono 獲取當(dāng)前時(shí)間的實(shí)現(xiàn)代碼

    c++ chrono 獲取當(dāng)前時(shí)間的實(shí)現(xiàn)代碼

    這篇文章主要介紹了c++ chrono 獲取當(dāng)前時(shí)間的實(shí)現(xiàn)代碼,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • C語(yǔ)言實(shí)現(xiàn)爆炸展開(kāi)的掃雷詳解

    C語(yǔ)言實(shí)現(xiàn)爆炸展開(kāi)的掃雷詳解

    windows自帶的游戲《掃雷》是陪伴了無(wú)數(shù)人的經(jīng)典游戲,本文將利用C語(yǔ)言實(shí)現(xiàn)這一經(jīng)典的游戲,文中的示例代碼講解詳細(xì),感興趣的可以學(xué)習(xí)一下,這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)爆炸展開(kāi)的掃雷游戲
    2022-07-07
  • Qt實(shí)現(xiàn)兩個(gè)獨(dú)立窗口的信號(hào)通信

    Qt實(shí)現(xiàn)兩個(gè)獨(dú)立窗口的信號(hào)通信

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)兩個(gè)獨(dú)立窗口的信號(hào)通信,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 一篇文章帶你了解論C語(yǔ)言中算法的重要性

    一篇文章帶你了解論C語(yǔ)言中算法的重要性

    最近一直在學(xué)數(shù)據(jù)結(jié)構(gòu)與算法,深深的感受到我們學(xué)習(xí)語(yǔ)言,永遠(yuǎn)都只是一項(xiàng)工具,方法才是其中最重要的部分。這篇文章我將會(huì)通過(guò)幾個(gè)例子來(lái)說(shuō)明算法,也就是寫(xiě)程序的思路在程序中的重要意義
    2021-08-08
  • 使用C++制作GC Server過(guò)程詳解

    使用C++制作GC Server過(guò)程詳解

    這篇文章主要介紹了使用C++制作GC Server過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Linux下Select多路復(fù)用實(shí)現(xiàn)簡(jiǎn)易聊天室示例

    Linux下Select多路復(fù)用實(shí)現(xiàn)簡(jiǎn)易聊天室示例

    大家好,本篇文章主要講的是Linux下Select多路復(fù)用實(shí)現(xiàn)簡(jiǎn)易聊天室示例,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 利用C語(yǔ)言實(shí)踐OOP,以及new,delete的深入分析

    利用C語(yǔ)言實(shí)踐OOP,以及new,delete的深入分析

    本篇文章是對(duì)用C語(yǔ)言實(shí)踐OOP,new,delete進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++實(shí)現(xiàn)LeetCode(35.搜索插入位置)

    C++實(shí)現(xiàn)LeetCode(35.搜索插入位置)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(35.搜索插入位置),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單登錄操作

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單登錄操作

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單登錄操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06

最新評(píng)論

资溪县| 诏安县| 东台市| 巨鹿县| 扎赉特旗| 隆子县| 延津县| 浦江县| 鸡西市| 鲜城| 桐城市| 镇赉县| 荣成市| 紫阳县| 南平市| 江永县| 崇信县| 宜昌市| 玉屏| 临澧县| 西吉县| 大余县| 宜昌市| 乐昌市| 安仁县| 阳东县| 惠来县| 峨眉山市| 调兵山市| 汤阴县| 广丰县| 林甸县| 调兵山市| 桦南县| 饶阳县| 通州区| 读书| 斗六市| 正蓝旗| 迁安市| 哈密市|