函数模版与类模版

²       模板是实现代码重用机制的一种工具,实质就是实现类型参数化,即把类型定义为参数。
²C++提供两种模板:函数模板,类模板

         函数模版与类模版:函数模版就是建立一个通用的函数,其函数返回的类型与形参类型不具体指定,而是用虚拟的类型来代表。类模版就是建立一个通用的类,其数据成员的类型、成员函数的返回和参数类型都可以不具体指定,而是用虚拟的类型代表

²    
²我们先来看一个最大值的函数
²函数模板就是建立一个通用的函数,其函数返回类型和形参类型不具体指定,而是用虚拟的类型来代表。
²凡是函数体相同的函数都可以用函数模板来代替,不必定义多个函数,只需在模板中定义一次即可。
²在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能
int max(int a,int b)
{
return a > b ? a : b;
}

char max(char a,char b)
{
  return a > b ? a : b;
}

float max(float a,float b)
{
   return a > b ? a : b;
}

template<typename T>     //或者  template<class T>
T max(T a, T b)
{ 
return a>b? a:b; 
}

void main()
{
  int iMax = max(3,5);	  //调用int max(int a, int b);
  char chMax = max('w','d');      //调用char max(char a, char b);
  float fMax = max(2.7f, 1.3f);  //调用float max(float a, float b);
}


²我们先来看一下下面这个类,求最大值的类
²和函数模板一样,类模板就是建立一个通用类,其数据成员的类型、成员函数的返回类型和参数类形都可以不具体指定,而用虚拟的类型来代表。
²当使用类模板建立对象时,系统会根据实参的类型取代类模板中的虚拟类型,从而实现不同类的功能
class CMax
{
  public:
		CMax(int a, int b)
		{
			m_a = a;
			m_b = b;
		}
int    GetMax()
		{
			return m_a>m_b? m_a:m_b;
		}
	private:
		int  m_a;
		int  m_b;

}

template<typename T>     //或者   template<class T>
class CMax
{
	public:
		CMax(T a, T b)
		{
			m_a = a;
			m_b = b;
		}
		T    GetMax()
		{
			return m_a>m_b? m_a:m_b;
		}
	private:
		T m_a;
		T m_b;
};

void main()
{
	CMax<int> maxInt(3,5);  //需要指定类型
	int iMax = maxInt.GetMax();

	CMax<char> maxChar('w','d');
	char chMax = maxChar.GetMax();

	CMax<float> maxFloat(2.7f,1.3f);
	float fMax = maxFloat.GetMax();
}

****************************************
可以定义多种类型的形参。
template<typename T1, typename T2>
class CTest
{...};
对象实例化时:
CTest testA<int, float>;
CTest testB<double, string>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值