c++學習之模板

        c++中的模板貌似在java中沒有,但是java有泛型,不知道c++有沒有,後面會繼續學習。模板的意思,就是說有一個原型,使用的時候只要按照原型的定義使用即可。是原型哦,可不是類型,所以模板把類型複雜的問題給解決了。這裏有必要說一下函數重載,函數重載是針對同樣的函數名,我們定義不同類型的形參,針對不同的形參,實現不同的函數邏輯。但是模板呢?是針對所有的類型,我們定義一個函數即可。這樣的話,也就是說模板,只有一個函數定義,針對多種類型進行同樣的邏輯處理。

        模板,分爲兩種,函數模板和類模板。早就聽說了c++模板功能強大。現在證實一下。

   函數模板

        函數模板的定義使用如下格式即可:

         template <class T> T getMax(T t1,T t2)

        這樣,在使用的時候,我們直接實現該函數的邏輯即可,避免了對類型的處理,如果T是對象類型腫麼辦,那麼需要操作符重載了來實現特有邏輯了。看看下面的代碼:

#include <iostream>
using namespace std;

template <class T> T getMax(T t1,T t2);
template <class T> T getMin(T t1,T t2);
template <class T,class U> T sum(T t1,U u1);


int main()
{
	int a=1,b = 2,c;
	double d1 = 1.2, d2 = 1.3;
	c = getMax(a,b);
	cout << c << endl;
	c = getMin(a,b);
	cout << c << endl;
	cout << sum(a,d1) << endl;
	return 0;
}

template<class T> T getMax(T t1,T t2)
{
	if(t1 > t2)
		return t1;
	return t2;
}

template <class T> T getMin(T t1,T t2)
{
	if(t1 > t2)
		return t2;
	return t1;
}

template <class T,class U> T sum(T t1,U u1)
{
	return t1+u1;
}

        在這裏我們定義了取最大值,最小值,加法運算的函數。每一個聲明或定義之前,都需要加上模板的定義纔可以。另外,針對sum函數,之所以有T,U,是說sum函數可以同時傳入兩種不同類型的實參。返回值是T,當然,我們可以根據需要,寫成U也可以啦。看看運行結果的截圖吧,結果爲什麼會這樣,我就不說了。

               

   類模板

        類模板是說,我們可以針對一個類中成員的類型進行模板化,這樣的話,類中的成員是什麼類型,我們也可以動態確定了。我也同樣寫了個例子。看看如下代碼:
#include <iostream>

using namespace std;

template <class T1,class T2>
class base
{
private:
	T1 x;
	T2 y;
public:
	base();
	base(T1 a,T2 b);
	show();
}; 


template <class T1,class T2>
base<T1,T2>::base()
{
	x = 1;
	y = 2;
}

template <class T1,class T2>
base<T1,T2>::base(T1 a,T2 b)
{
	x = a;
	y = b;
}

template <class T1,class T2>
base<T1,T2>::show()
{
	cout << "x = " << x << endl;
	cout << "y = " << y << endl;
}

int main()
{
	base<int,int> *t = new base<int,int>(5,10);
	t->show();
	delete t;
	return 0;
}

        上面的代碼定義了一個base類,base類中有兩個私有成員變量,變量的類型是不確定的,模板化的。同樣,在構造函數中,也可以使用模板化的參數。需要注意的是,我們在實現每個類的方法時,需要將每個方法前都加上模板化的聲明。我們看看這個代碼的執行結果吧:
        

        到了這裏,模板的功能就學習完了。

        

        


發佈了59 篇原創文章 · 獲贊 10 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章