类模板的简述
之前的函数模板文章中我们将泛型的思想应用到函数中,现在我们将泛型的思想应用于类,类模板就是为数据结构诞生的,一些类主要用于存储和组织数据元素,类中数据组织的方式和数据元素的具体类型无关,如:数组类,链类,Stack类,Queue类…C++中将模板的思想应用于类,使得类的实现不关注数据元素的具体类型,而只关注类所需要实现的功能,类模板在使用时只能显示指定类型
C++中的类模板
—以相同的方式处理不同的类型
—在类声明前使用template进行标识
—用于说明类中使用的泛指类型T
template <typename T>
class Operator
{
public:
T op(T a,T b);
};
类模板的应用
—只能显示指定具体类型,无法自动推导
—使用具体类型定义对象
Operator <int> op1;
Operator <string> op2;
int i = op1.op(1,2);
string s = op2.op("ttt","zzz");
代码:
#include <string>
#include <iostream>
using namespace std;
template <typename T>
class Operator
{
public:
T add(T a,T b)
{
return a+b;
}
T minus(T a,T b)
{
return a-b;
}
T multiply(T a,T b)
{
return a*b;
}
T divide(T a,T b)
{
return a/b;
}
};
int main()
{
Operator <int>op;
cout<<op.add(1,2)<<endl;
Operator <string>op1;
cout<<op1.add("I'm","happy")<<endl;//二次编译,针对每个独立的成员函数来编译的
//cout<<op1.minus("I'm","sad")<<endl;类模板的二次编译不通过,在C++里面string类对象的相减操作是没有定义的
return 0;
}
例子:
sice@sice:~$ ./a.out
3
I'mhappy
可以看出类模板的应用也是提高代码的复用性,更加强大==,对于上面注释的语句我们需要在全局重载操作符"+"函数来实现==
类模板的工程应用规范
类模板必须在头文件中定义
类模板不能分开实现在不同的文件中
类模板外部定义的成员函数需要加上模板<>声明
将上述代码规范化:
a.cpp
#include