operator << overload c ++

aha*_*ron 3 c++ operator-overloading stream

我如何重载"<<"运算符(对于cout)所以我可以对类k进行"cout"

sbi*_*sbi 17

任何类型的输出运算符的规范实现T是这样的:

std::ostream& operator<<(std::ostream& os, const T& obj)
{
  os << obj.get_data1() << get_data2();
  return os;
}
Run Code Online (Sandbox Code Playgroud)

请注意,输出流运算符通常不是成员函数.(那是因为二元运算符是成员函数,它们必须是左手参数类型的成员.然而,这是一个流,而不是你自己的类型.operator<<()对于一些内置函数有一些重载的例外,它们是输出流类的成员.)
因此,如果不是所有数据T都可公开访问,则此运算符必须是T

class T {
  friend std::ostream& operator<<(std::ostream&, const T&);
  // ... 
};
Run Code Online (Sandbox Code Playgroud)

或者操作员调用执行流式传输的公共函数:

class T {
public:
  void write_to_stream(std::ostream&);
  // ... 
};

std::ostream& operator<<(std::ostream& os, const T& obj)
{
  obj.write_to_stream(os);
  return os;
}
Run Code Online (Sandbox Code Playgroud)

后者的优点是write_to_stream()成员函数可以virtual(并且是纯的),允许流式传输多态类.

如果你想要花哨并支持各种各样的流,你必须要模仿:

template< typename TCh, typename TTr >
std::basic_ostream<TCh,TTr>& operator<<(std::basic_ostream<TCh,TTr>& os, const T& obj)
{
  os << obj.get_data1() << get_data2();
  return os;
}
Run Code Online (Sandbox Code Playgroud)

(但是,模板不适用于虚拟功能.)