模板类在使用非基本数据类型有两个限制:
(1)必须有一个默认构造函数,即参数列表为空的构造函数(否则会出现构造函数无法匹配的错误)。
(2)必须支持复制运算符(没有涉及深拷贝不用担心,C++默认支持浅拷贝)。
实例源代码如下:
代码用到了非基本类型string,所以必须添加默认构造函数,否则编译错误。
#include <iostream>
#include <string>
using namespace std;
template<typename T1, typename T2>
class Pair
{
public:
//template<class T1, class T2>
//appropriate methods
Pair()//没有这个函数会出现编译错误
{
;
}
Pair(T1 t, T2 tt)
{
first = t;
second = tt;
}
T1 getFirst()
{
return first;
}
T2 getSecond()
{
return second;
}
void setFirst(T1 t)
{
first = t;
}
void setSecond(T2 t)
{
second = t;
}
void swap(Pair& p)
{
T1 t;
T2 tp;
t = p.getFirst();
p.setFirst(getFirst());
setFirst(t);
tp = p.getSecond();
p.setSecond(getSecond());
setSecond(tp);
}
private:
T1 first;
T2 second;
};
int main()
{
Pair<string, int> p1, p2("Lily", 19);
p1.setFirst("Tom"), p1.setSecond(20);
cout<<p1.getFirst()<<" "<<p1.getSecond()<<endl;
cout<<p2.getFirst()<<" "<<p2.getSecond()<<endl;
p1.swap(p2);
cout<<p1.getFirst()<<" "<<p1.getSecond()<<endl;
cout<<p2.getFirst()<<" "<<p2.getSecond()<<endl;
return 0;
}