模板类重载运算符注意事项

2021-07-08  本文已影响0人  寽虎非虫003

注意事项

一、定义在模板类外部

//声明模板类
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;
    }
};

数据自己填

上一篇下一篇

猜你喜欢

热点阅读