这个重载的运算符"Where"接受"out"?



下面的代码展示了如何重载枚举类型的<<操作符。

days operator+ (days d)
{
    return static_cast<days>((static_cast<int>(d) + 1) % 7);
}
ostream& operator<< (ostream& out, days d)
{
    switch(d)
    {
        case SUNDAY: out << "SUNDAY"; 
        break;
        case MONDAY: out << "MONDAY";
        break;
        case TUESDAY: out << "TUESDAY";
        break;
        case WEDNESDAY: out << "WEDNESDAY";
        break;
        case THURSDAY: out << "THURSDAY";
        break;
        case FRIDAY: out << "FRIDAY";
        break;
        case SATURDAY: out << "SATURDAY";
        break;
    }
    return out;
}

上面的代码表面上可以按以下方式使用:

int main()
{
    days aDay = SUNDAY;
    cout << +aDay << endl;
    return 0;
}

很明显,这里的目的是重载<<操作符,用于枚举类型days。最终,我们将使用它作为:cout << aDay << endl;

我不明白的是,我们如何/在哪里输入out流。我可以理解,一个day对象被输入到<<,因为它在右边,但我看不到out对象被输入的地方……右边只有一样东西

谢谢。

ostream& operator<< (ostream& out, days d)函数不打算在代码中直接调用。相反,通过定义该函数,您是在告诉编译器"这里有一个实现<<运算符的函数,用于将days对象传递给ostream对象。"然后,每当您执行类似cout << aDay << endl;的操作时,编译器都会隐式地生成对operator<<函数的调用。cout对象ostream的一个实例(或其子类)。

别忘了你总是可以使用括号-> cout << +aDay << endl -> (cout << +aDay) << endl

编译器会像Mike Hots说的那样,查找与std::ostream, days参数匹配的操作符重载。

最新更新