如何重定向cout-stream?

时间:2018-01-01 18:32:10

标签: c++ operator-overloading cout

我得到了一项我无法解决的任务。我不是要求一个完整的解决方案,但如果有人指出我正确的方向,我将感激不尽:

有一个存储日期值的类。它有一个函数displayDate()。

class Date{
    int day, month, year;
public:
[...]
    virtual void displayDate(ostream &out=cout) const {
    out << getDay() << "." << getMonth()
            << "." << getYear() << endl;
    }
};
ostream &operator<<(ostream &os, const Date &dob) {
//?
}

运营商&lt;&lt;应该重载并应使用displayDate() - Function而不是自己的输出代码。如何重定向displayDate()的cout-stream,以便我可以在运算符&lt;&lt; -Function中使用它?

谢谢。

2 个答案:

答案 0 :(得分:2)

只需在运算符&lt;&lt;。

中传递的对象实例上调用displayDate
std::ostream & operator<<(std::ostream & strm, MyClass const & o)
{
  o.someFunc(strm);
  return strm;
}

答案 1 :(得分:0)

ostream &operator<<(ostream &os, const Date &dob) {
    dob.displayDate(os);
}

为您拼出来。 请注意,displayDate的默认输出流是std :: cout。这在这里宣布:

virtual void displayDate(ostream &out=cout) const { ...

在运营商中使用此功能时&lt;&lt;您使用引用'os'覆盖默认输出流。