欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++超詳細介紹模板

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

定義

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

一個程序一般是經(jīng)過預處理——>編譯——>匯編——>鏈接。但是因為程序無法知道模板的具體類型(int,double),所以無法進行預處理,也就不能生成可執(zhí)行代碼。

例子

下面我們來看一個例子

我們在學習c語言的時候,當我們需要交換兩個數(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;
}

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

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

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

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

格式

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ù)體
}

意識就是說,我們在這里用template定義了一個模板”T”,當我們使用Swap的時候,計算機根據(jù)我們a,b(都是int)的類型,推出T應當是int 型。

實際上這個

void Swap(T & x, T & y)

變成了

void Swap (int & x, int & y)

但是需要注意,只有當a,b都是同類型的時候,計算機才能自動推到,如果是不同類型,我們將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;
}

就會出現(xiàn):

因為兩個數(shù)一個int一個double,計算機就不知道給這個T賦int 還是double,這個時候有兩種處理方法

處理方法

第一種隱式實例化:讓編譯器根據(jù)實參推演模板參數(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);//在這個地方前面加<int>,計算機就會默認T為int型
}

第二種顯式實例化:在函數(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型,但是我們強制轉換為int之后,兩者的類型都相同,計算機就能自動推導了
}

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

相關文章

  • 一文詳解C++中的mutable關鍵字

    一文詳解C++中的mutable關鍵字

    在C++中mutable關鍵字正如字面意思所示,表示「可變的」之意,一般在以下兩種情況中使用較多,一是修飾類中的變量,用來突破const的限制,二是在Lambda表達式中使用,用來捕獲修改表達式之外的變量值,下面我們就針對這兩種使用場景逐個介紹
    2023-10-10
  • C++實現(xiàn)LeetCode(68.文本左右對齊)

    C++實現(xiàn)LeetCode(68.文本左右對齊)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(68.文本左右對齊),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++中getline()、gets()等函數(shù)的用法詳解

    C++中getline()、gets()等函數(shù)的用法詳解

    這篇文章主要介紹了C++中getline()、gets()等函數(shù)的用法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • C語言數(shù)據(jù)結構順序表中的增刪改(頭插頭刪)教程示例詳解

    C語言數(shù)據(jù)結構順序表中的增刪改(頭插頭刪)教程示例詳解

    這篇文章主要為大家介紹了C語言數(shù)據(jù)結構順序表中增刪改關于頭插頭刪的教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-02-02
  • opencv配置的完整步驟(win10+VS2015+OpenCV3.1.0)

    opencv配置的完整步驟(win10+VS2015+OpenCV3.1.0)

    OpenCV是計算機視覺中經(jīng)典的專用庫,其支持多語言、跨平臺,功能強大,這篇文章主要給大家介紹了關于opencv配置(win10+VS2015+OpenCV3.1.0)的相關資料,需要的朋友可以參考下
    2021-06-06
  • C語言編寫猜數(shù)游戲

    C語言編寫猜數(shù)游戲

    這篇文章主要為大家詳細介紹了C語言編寫猜數(shù)游戲,可以自定義猜數(shù)范圍和機會次數(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C語言實現(xiàn)的程序員老黃歷實例

    C語言實現(xiàn)的程序員老黃歷實例

    這篇文章主要介紹了C語言實現(xiàn)的程序員老黃歷,涉及日期的判定及流程控制的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • OpenCV圖像輪廓提取的實現(xiàn)

    OpenCV圖像輪廓提取的實現(xiàn)

    本文主要介紹了OpenCV圖像輪廓提取的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • c 調(diào)用python出現(xiàn)異常的原因分析

    c 調(diào)用python出現(xiàn)異常的原因分析

    本篇文章是對使用c語言調(diào)用python出現(xiàn)異常的原因進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言掃雷詳細代碼分步實現(xiàn)流程

    C語言掃雷詳細代碼分步實現(xiàn)流程

    掃雷是電腦上很經(jīng)典的游戲,特意去網(wǎng)上玩了一會,幾次調(diào)試之后,發(fā)現(xiàn)這個比三子棋要復雜一些,尤其是空白展開算法上和堵截玩家有的一拼,與實際游戲差別較大,不能使用光標,下面來詳解每一步分析
    2022-02-02

最新評論