如果cout在重载输出操作符函数中使用怎么办?

时间:2012-05-07 11:26:47

标签: c++ operator-overloading cout

我有以下代码和过载输出操作符:

class Student 
{
public:
    string name;
    int age;
    Student():name("abc"), age(20){}
    friend ostream& operator<<(ostream&, const Student&);
};
ostream& operator<<(ostream& os, const Student& s)
{
    os << s.name; // Line 1
    return os;
}

我想知道如果我将Line 1更改为cout << s.name会有什么区别?{/ 1}}

2 个答案:

答案 0 :(得分:4)

然后operator <<会宣传它可以将学生的名字输出到任何流,但忽略其参数并始终输出到标准输出。作为类比,它类似于写作

int multiplyByTwo(int number) {
    return 4;
}

你可以看到这绝对是一个问题。如果你真的想总是返回4,那么该函数应该是

int multiplyTwoByTwo() {
    return 4;
}

当然你不能让operator <<只接受一个参数,因为它是一个二元运算符,所以这就是类比分解的地方,但是你得到的结论。

答案 1 :(得分:2)

它不会在operator <<上拨打os,而是在cout上。 cout也是ostream,但不是唯一的。

例如,如果要输出到文件,则会有fstream。你写了

fstream fs;
Student s;
fs << s;

输出不会打印到文件,而是打印到cout,这不是您想要的。

这就像是在说,“你可以将学生输出到你想要的任何ostream,它仍然会被打印到控制台”。