c++模版及模版类简单实现

参考:http://www.cplusplus.com/doc/tutorial/templates/

// 模版.cpp : Defines the entry point for the console application.

//以下代码可直接编译测试

#include "stdafx.h"
namespace tp1
{
	//--------------1--------------
	//模版声名,参数可以不声明
	template<typename T>T GetaAdd(T,T);
	//定义上面模版,模版参数名字可以不同
	template<typename a>a GetaAdd(a a1,a a2)
	{
		return a1+a2;
	}
	//---------------1---------

	//---------------2-----------
	//模版声明及定义
	template<typename T>T GetaMul(T& a,T& b)
	{
		return a-b;
	}
	//---------------2-----------
}
namespace tp2
{
	template <class myType>
	myType GetMax (myType a, myType b) {
		return (a>b?a:b);
	}
}
//模版重载
/************************************************************************/
/*   原型
     template <class T> class mycontainer { ... };
     template <> class mycontainer <char> { ... };                                                                     
*/
/************************************************************************/
namespace tp3
{
	template <class T>
	class mycontainer {
		T element;
	public:
		mycontainer (T arg) {element=arg;}
		T increase () {return ++element;}
	};

	// 重载:
	template <>
	class mycontainer <char> {
		char element;
	public:
		mycontainer (char arg) {element=arg;}
		char uppercase ()
		{
			if ((element>='a')&&(element<='z'))
				element+='A'-'a';
			return element;
		}
	};
}
int _tmain(int argc, _TCHAR* argv[])
{
	int a = tp1::GetaAdd(2,3);
	int i=2,j=3;
	int c = tp1::GetaMul(i,j);
	//---------------------------------------------
	int i1=5, j1=6, k;
	long l=10, m=5, n;
	//------方法1
	k=tp2::GetMax<int>(i1,j1);
	n=tp2::GetMax<long>(l,m);
	//------方法2
	k=tp2::GetMax(i1,j1);
	n=tp2::GetMax(l,m);
	//------------------------------------------------
	tp3::mycontainer<int> myint (7);
	tp3::mycontainer<char> mychar ('j');
	int ret = 0;
	return 0;
}

//类模版
namespace tp4
{
//---------类模版1---------
   //类声明 1
	template <class T>
	class mypair {
		T values [2];
	public:
		mypair (T first, T second)//构造函数
		{
			values[0]=first; values[1]=second;
		}
	};
	//****定义实现
	mypair<int> myobject (115, 36);
	mypair<double> myfloats (3.0, 2.18);
//------------类模版2---------
			//类声明 2
			template <class T>
			class mypair2 {
				T a, b;
			public:
				mypair2 (T first, T second)//构造函数
				{  
					a=first; 
					b=second;
				}
				//++++函数声明
				T getmax ();
			};
			//++++函数定义2
			template <class T>
			T mypair2<T>::getmax ()
			{
				T retval;
				retval = a>b? a : b;
				return retval;
			}
			//****定义实现
			mypair2 <int> myobject2 (100, 75);
			int max = myobject2.getmax();

//------------------------类模版3--------------
						//带默认参数
						template <class T=char, int N=10> 
						class mysequence {
							//代码
						};
						mysequence<> myseq;//默认实现
						mysequence<char,10> myseq2;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值