1. 程式人生 > >【C++】類模板(template)作用對比舉例

【C++】類模板(template)作用對比舉例

一、類模板(template)

類模板是後期C++加入的一種可以大大提高程式設計效率的方法

關鍵字template

用法:

template <模板引數表>   ----->模板引數表一般格式為class (識別符號)

class (類名)

{

     //....

}

二、舉個栗子

我們要寫一個比較類,類裡面有兩個私有成員

在類裡有求私有成員中的最大值和最小值的兩個公有成員

用來判斷兩個數的大小

下面我們來進行有無類模板的比較

(1)不用類模板

程式碼塊:

class Compare
{
	public:
		Compare(int a,int b)//建構函式,用於初始化
		{
			x = a;
			y = b;
		}
		int max()//求較大值
		{
			return (x>y)?x:y;
		}
		int min()//求較小值
		{
			return (x<y)?x:y;
		}
	private:
		int x;
		int y;	
};

分析:

我們會發現,這個類只能用於比較整形的大小

比如3,5;呼叫max返回5,呼叫min返回3

但是如果比較的是浮點數,那就不可以了
 

(2)用類模板

程式碼塊:

template <class Type>
class compare
{
	public:
		compare(Type a,Type b)
		{
			x = a;
			y = b;
		}
		Type max()
		{
			return (x>y)?x:y;
		}
		Type min()
		{
			return (x<y)?x:y;
		}
	private:
		Type x;
		Type y;
};

分析:

通過對比發現,這兩塊程式碼差別並不是很大,僅僅是增加了關鍵字

還有型別Type替換之前的整型int

在main函式定義時,就可以定義不同型別的物件了

main函式程式碼:

int main(void)
{	
	compare<int> C1(3,5);
	cout<<"最大值:"<<C1.max()<<endl;
	cout<<"最小值:"<<C1.min()<<endl;
	
	compare<float> C2(3.5,3.6);
	cout<<"最大值:"<<C2.max()<<endl;
	cout<<"最小值:"<<C2.min()<<endl;
	
	compare<char> C3('a','d');
	cout<<"最大值:"<<C3.max()<<endl;
	cout<<"最小值:"<<C3.min()<<endl;
	return 0;
}

執行結果:



三、如何寫一個將一個類轉化為類模板

(1)寫出一個類

(2)將型別需要改變的地方進行替換(如上面的Type)

(3)在類的前面加入關鍵字template以及函式引數表

(4)定義物件的格式     類名+<Type>+ xx(引數)

比如上面的compare<int> C1(3,5);

(5)切記,模板函式如果定義在類體外,需要在前面加上一行template <函式引數表>。並在類模板名後面用尖括號加上<虛擬函式引數>

比如

template<class Type>

Type compare <Type>::max()

{

       //.....

}