注意事项
- 要先把模板类声明;
- 声明要重载的运算符;
- 具体定义模板类,并在类内部定义重载运算符为
friend
。
- 注意加一个
<>
或者<T>
在运算符后面;
- 在类外面实现运算符重载定义;
- 如果是定义在模板类内部,不用操作如此复杂。
一、定义在模板类外部
//声明模板类
template <typename T>
class Base;
//声明要重载的运算符
template <typename T>
ostream& operator<< (ostream &, const Base<T>&);
//实现模板类
template <typename T>
class Base
{
public:
//声明重载,注意<>或<T>
template<>
friend ostream& operator << <T>(ostream &, const Base<T> &);
//或者如下这样声明重载也行,也要注意<>或<T>
//friend ostream& operator << <>(ostream &, const Base<T> &);
};
template <typename T>
ostream& operator<< ( ostream &out, const Base<T>& e )
{
return out << e->data;
}
二、定义在模板类内部
//不需要预先声明
template <typename T>
class Base
{
public:
//直接实现
friend ostream& operator << <T>(ostream &, const Base<T> &)
{
return out << e->data;
}
};
数据自己填
网友评论