重载<< operator for std :: ostream

Nic*_*ick 3 c++ overloading

ostream& operator <<(ostream& osObject, const storageRentals& rentals)
{
    osObject << rentals.summaryReport();
    return osObject;
}
Run Code Online (Sandbox Code Playgroud)

summaryReport() 是一个void函数,它给了我一个错误:

没有运算符"<<"匹配这些操作数

但如果我将summaryReport函数更改为a int,则错误不存在,但我遇到的问题是您必须返回一个值,并将其打印在屏幕上.

void storageRentals::summaryReport() const
{
   for (int count = 0; count < 8; count++)
      cout << "Unit: " << count + 1 << "    " << stoUnits[count] << endl;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法cout <<用void函数重载?

Naw*_*waz 10

您应该将summartReporttake 定义ostream&为参数,如下所示:

std::ostream&  storageRentals::summaryReport(std::ostream & out) const
{
    //use out instead of cout
    for (int count = 0; count < 8; count++)
        out << "Unit: " << count + 1 << "    " << stoUnits[count] << endl;

    return out; //return so that op<< can be just one line!
}
Run Code Online (Sandbox Code Playgroud)

然后将其称为:

ostream& operator <<(ostream& osObject, const storageRentals& rentals)
{
    return rentals.summaryReport(osObject); //just one line!
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,它不被称为"重载cout".你应该说,"超载operator<<std::ostream.