非模板函数 运算符重载一般都只要在类中声明为友元函数(此时没有隐含的this指针,函数中参数不能省),在类外定义即可。
但是带模板的运算符重载要注意以下几点:
1,全局的operator 重载函数要在类之前声明. 不加<>
2,模板函数做友元要显式的声明模板形参,如果<>内空就是把当前类的模板参数传 进来用.
在类中声明时要加<>.
3.函数定义时,不加<>.
例:链式栈的模板定义
以下是典型错误:(即按非模板运算符重载来定义)
template <class T>
class LinkedStack{
public:
...
istream& operator>>(istream&is,LinkedStack<T> &s);
ostream& operator<<(istream&os,LinkedStack<T> &s);
private:
...
}
含模板的运算符重载正确定义:
template <class T>
class LinkedStack; //类声明
template <class T> //operator重载函数要在类前全局声明
istream& operator>>(istream&is ,LinkedStack<T> &s);
template <class T> //operator重载函数要在类前全局声明
ostream& operator<<(ostream&os ,Li