模板
模板分为函数模板和类模板。
1、函数模板:
定义格式:
template<模板形参表>
返回值类型 函数名(参数表){
函数体
}
其中,template是模板定义的关键字。
<模板形参表>中包含一个或多个用逗号分开得模板形式参数,每一项均由关键字class或typename引导一个由用户命名的标识符,此标识符为模板参数。如
#include <iostream>
template <class T>
T Max(T x, T y)
{
return (x>y) ?x: y;
}
2、类模板
定义格式:
template<模板形参表>
class 类模板名
{
成员的声明:
}
类模板是参数化的类,即用于实现数据类型参数化的类。应用类模板可以使类中的数据成员、成员函数的参数以及成员函数的返回值能根据模板参数匹配情况取任意数据类型。这种类型既可以是C++预定义的数据类型,也可以是用户自定义的数据类型。如:
#include <iostream>
using namespace std;
template <typename T>
class Square
{
T x;
public:
Square(T xx):x(xx){ }
T fun(){return x*x;}
};
类模板成员函数的定义:
类模板中的成员函数定义,若放在类模板的定义之中则与类的成员函数的定义方法相同;若在类模板之外定义,则成员函数定义格式如下:
template<模板形参表>
返回值类型 类模板名<形参名表>::成员函数名(参数表)
{
成员函数体
}
普通类的成员函数在类外定义:
double Rectangle::circumference( )
{
return 2*length*width;
}
类模板的成员函数在类外定义:
template<class T>
T Rectangle<T>::circumference( )
{
return 2*length*width;
}
类模板实例化的格式:
类模板名 <实际类型>
定义模板类的对象的格式:
类模板名 <实际类型> 对象名(实参表);
#include <iostream>
using namespace std;
template <typename T>
class Square {
T x;
public:
Square(T xx):x(xx){}
T fun(){return x*x;}
};
int main() {
Square <int> inta(15);
Square <float> floata(16.5);
Square <double> doublea(15.55);
cout<<"square of int data:"<<inta.fun()<<endl;
cout<<"square of float data:"<<floata.fun()<<endl;
cout<<"square of double data:"<<doublea.fun()<<endl;
return 0;
}