当几个函数完成的功能类似的时候我们没必要针对不同的类型来重载函数的定义,这个时候我们就需要用到函数模板了,函数模板只是声明了一个函数的描述,不是一个可以直接执行的函数,只有根据实际情况用实参的数据类型代替类型参数标识符之后,才能产生真正的函数。类的模板与之类似,我们将数据抽象到这种层次的时候,基本就可以模拟大部分的事物了。这里只是对使用做一个简单的说明,更详细的内容可以自行百度google。

//模板类的定义
#ifndef _MY_CLASS_H_
#define _MY_CLASS_H_
#include <iostream>

using namespace std;
//以下是模板类的定义,尖括号中可以使用typename也可以使用class,后边的T可以替换为其他的标识符
//T这个时候就可以看成是一种类型名,所以在类的声明内部就用T来代替用到的这个类型名
//template<class T>
template<typename T>
class MyClass
{
private:
	T age;
public:
	MyClass(T age){this->age = age;};
	//MyClass(T age):age(age){};
	T getAge();
};
//模板函数的定义要放到头文件中,记住MyClass不是类型名,而MyClass<T>才是类型名,函数的实现就采用如下的写法
template<class T>
T MyClass<T>::getAge()
{
	return this->age;
}
#include "MyClass.h"

//模板函数
template<typename T>
T max(T a,T b)
{
	if(a>b)
		return a;
	else
		return b;
}

int main()
{
	//使用模板函数
	cout<<::max(1,2)<<endl;
	cout<<::max(1.1,2.2)<<endl;

	//使用类模板
	MyClass<int> age(20);
	int i = age.getAge();
	cout<<i<<endl;

	return 0;
}