C++模板

模板

模板(Template)指C++程序设计设计语言中采用类型作为参数的程序设计,支持通用程序设计。C++ 的标准库提供许多有用的函数大多结合了模板的观念,如STL以及IO Stream。模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。

模板是一种对类型进行参数化的工具;

模板包括函数模板(function template)和类模板(class template)。

函数模板

针对仅参数类型不同的函数

template <class 形参名,class 形参名,......> 
 返回类型 函数名(参数列表)

   {

      函数体

   }

如下代码所示sort是一个模板函数

#include<algorithm>
void main()
{
	int a[] = { 1,2,3,2,3,42,4,5,7 };
	char a[] = { 'a','b','w' };
	int n = sizeof(a) / sizeof(a[0]);
	sort(a, a + n);//模板
	for (int i = 0; i < n; i++)
	{
		cout << a[i] << " ";
	}
	cout << endl;
}

举例:将Max模板化

int Max(int a, int b)
{
	return a > b ? a : b;
}
double Max(double a, double b)
{
	return a > b ? a : b;
}
char Max(char a, char b)
{
	return a > b ? a : b;
}
void main()
{
	cout << Max(4, 6) << endl;
	cout << Max(4.1, 1.6) << endl;
	cout << Max('a','A') << endl;
}

 其函数模板如下所示:

template<class T>   //函数模板——经过类型参数化——>模板函数
T Max(T a, T b)
{
	return a > b ? a : b;
}

void main()
{
	cout << Max(4, 6) << endl;//类型参数化
	cout << Max(4.1, 1.6) << endl;
	cout << Max('a', 'A') << endl;
}

 函数模板具体化:

/模板的特化——具体化
template<>
const char* Max(const char* a, const char* b)
{
	cout << "const char* max" << endl;
	return strcmp(a, b) > 0 ? a : b;
}
void main()
{
 cout << Max("333","555") << endl;//const char*
}

类模板

针对仅数据成员和成员函数类型不同的类

类模板定义如下:

template<类型模板参数表>
class 类名
{
…… //类声明体
}; //再次指出分号不可少
template<类型模板参数表>
返回类型 类名<模板参数表>::成员函数名1(形参表)
{
……;//成员函数定义体
}
……
template<类型模板参数表>
返回类型 类名<模板参数表>::成员函数名n(形参表)
{
……;//成员函数n定义体
}
//类型替换的过程被称为模板实例化 template instantiation

  例如:

template<class T>
class A
{
public:
	A(T i):m_i(i){}
	void print()
	{
		cout << "m_i=" << m_i << endl;
	}
private:
	T m_i;
};
void main()
{
	A<int> a(4);  //将int当成参数传递给模板中的T->模板类
	a.print();
	A<char>b('6');
	b.print();
}

类模板具体化: 

template<>
class A<const char*>
{
public:
	A(const char*i)
	{
		m_i = new char[strlen(i) + 1];
		strcpy_s(m_i, strlen(i) + 1, i);
	}
	~A()
	{
		delete[]m_i;
	}
private:
	char* m_i;
};
void main()
{
  A<const char*>d("helloworld");
  d.print();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值