通过例子加深印象:
函数模板:----------------------------------------
//函数模板:用来创建一个通用功能的函数,用来支持不同的形参,进一步简化函数的重载设计
//声明方法:关键字template<tyoename T>
#include <iostream>
using namespace std;
//定义函数模板
//使用函数模板实现abs函数(取绝对值)
template<typename T>
T abs(T x)
{
return x > 0?x:-x;
}
int main()
{
//功能:不适用判断语句求两个数值的最大值
int a = 100;
int b = -200;
//调用函数模板abs,输出最大值
cout << (a + b +abs(a-b))/2<<endl;
double c = -3.14;
double d = 5.5;
//调用函数模板输出最大值
cout << (c+d + abs(c-d))/2<<endl;
}
类模板:----------------------------------------
//类模板的作用:使用户可以为类声明一种模式,使得类中的某些数据成员、某些成员函数的参数、
//某些成员函数的返回值,能使用任意类型(包括基本类型和用户自定义类型)
//类模板的声明
/*
template <typename T>
class 类名
{
};
*/
/*在类外部定义类的成员函数采用一下格式
template <typename T>
函数返回类型 类名<T>::函数名(参数表){}
*/
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
//定义以模板类
template <typename T>
class Student
{
public:
Student(const char *name = "",const T score = 0);
void show();
~Student();
private:
char *m_name;
T m_score; //可以是整形,也可以是double行
};
//类成员函数定义
template<typename T>
Student<T>::Student(const char *name, const T score):
m_name(new char[strlen(name)+1]),
m_score(score)
{
memset(m_name,0,strlen(name+1));
strcpy(m_name,name);
}
template<typename T>
Student<T>::~Student()
{
delete [] m_name;
m_name = NULL;
}
//每个成员函数都要tamplate<typename T>...
template<typename T>
void Student<T>::show()
{
cout << m_name <<":"<<m_score<<endl;
}
int main()
{
printf("------------------\n");
//构建对象 Student<数据类型>
Student<int> S1("数学",100);
S1.show();
//构建第二个对象
Student <double> S2("语文",99.5);
S2.show();
printf("------------------\n");
return 0;
}