亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++的模板如何使用

發布時間:2022-06-23 13:45:15 來源:億速云 閱讀:163 作者:iii 欄目:開發技術

這篇文章主要介紹“C++的模板如何使用”,在日常操作中,相信很多人在C++的模板如何使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C++的模板如何使用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

一.泛型編程

泛型編程:不再是針對某種類型,能適應廣泛的類型,跟具體的類型無關的代碼

如何實現一個通用的交換函數呢?

void Swap(int& left, int& right)
{
	int temp = left;
	left = right;
	right = temp;
}
void Swap(double& left, double& right)
{
	double temp = left;
	left = right;
	right = temp;
}

使用函數重載雖然可以實現,但是有一下幾個不好的地方: 1. 重載的函數僅僅是類型不同,代碼復用率比較低,只要有新類型出現時,就需要用戶自己增 加對應的函數 2. 代碼的可維護性比較低,一個出錯可能所有的重載均出錯

因此我們需要告訴編譯器一個模子,讓編譯器根據不同的類型利用該模子來生成代碼

二.函數模板

C++的模板如何使用

模板分為:函數模板,類模板

1.函數模板概念

函數模板代表了一個函數家族,該函數模板與類型無關,在使用時被參數化,根據實參類型產生 函數的特定類型版本。

2.函數模板格式

template<typename T>

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

說明:

1.template<class T> 和 template<typename T>在此暫時認為一樣,template<struct T>是 錯誤的 ,沒有這種寫法

2.T是type的縮寫,T不一定寫T,可以寫任意字母,比如X,t &hellip;&hellip;但是習慣寫為T

舉例:

template<typename T>    //或template<class T>
void Swap(T& left, T& right)
{
	T tmp = left;
	left = right;
	right = tmp;
}
int main()
{
	int a = 0, b = 1;
	double c = 2.2, d = 3.3;
	swap(a, b);
	swap(c, d);
	return 0;
}

swap(a, b); 和swap(c, d); 調用的是同一個函數嗎?

答:不是同一個。底層匯編可以看出不是同一個,如果調試時發現走的是同一個函數,其實是編譯器的優化導致。

C++的模板如何使用

實際上以后swap函數都不用自己寫了,庫中有模板,直接用就行

C++的模板如何使用

3.函數模板的原理

在編譯器編譯階段 ,對于模板函數的使用, 編譯器需要根據傳入的實參類型來推演生成對應類型 的函數 以供調用。比如: 當用 double 類型使用函數模板時,編譯器通過對實參類型的推演,將 T 確定為 double 類型,然后產生一份專門處理 double 類型的代碼 ,對于字符類型也是如此。 模板的實例化:

C++的模板如何使用

三.類模板

類模板的定義格式

template < class T1 , class T2 , ..., class Tn >

class 類模板名

{

// 類內成員定義

};

舉例:調用 Stack<int> st1; 時,用int替換模板中的T。調用 Stack<double> st1; 時,用double替換模板中的T

// 類模板
template<class T>
class Stack
{
public:
	Stack(int capacity = 0)
	{
		_a = new T[capacity];
		_capacity = capacity;
		_top = 0;
	}
	~Stack()
	{
		cout << "~Stack()" << endl;
		delete[] _a;
		_capacity = 0;
		_top = 0;
	}
	void Push(const T& x)
	{}
private:
	T* _a;
	int _top;
	int _capacity;
};
int main()
{
	Stack<int> st1; // int
	st1.Push(1);
	Stack<double> st2; // double
	st2.Push(2.2);
	return 0;
}

到此,關于“C++的模板如何使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

建瓯市| 巴林右旗| 登封市| 海门市| 丘北县| 垣曲县| 桦南县| 岱山县| 宿松县| 漳州市| 阿拉善右旗| 禄劝| 天等县| 柳林县| 南江县| 颍上县| 江口县| 保定市| 宁津县| 宕昌县| 东城区| 翁牛特旗| 金溪县| 卢氏县| 开江县| 贡觉县| 紫阳县| 武乡县| 万全县| 格尔木市| 五家渠市| 浑源县| 红原县| 栖霞市| 宁国市| 墨江| 屯昌县| 商洛市| 齐河县| 苏尼特左旗| 甘德县|