cout重载全局函数


为什么c++中重载流操作符要用友元函数

作为成员函数的话,左操作数非得是自己不可

cout << XXX 这种情况是cout在调用operator<<而不是XXX在调用operator<< 。
如果你要把operator<<设为成员函数就只能用 XXX << cout 这种形式。

所以这样也是可以的,就是有违常理

struct point
{
    int x;
    int y;

    point (int _x, int _y)
        : x(_x), y(_y)
    {}

    std::ostream& operator<<(std::ostream& os) const
    {
        os << "(" << x << ", " << y << ")";
        return os;
    }
};

int main(int argc, const char* argv[])
{
    point p1(1, 2);

    p1 << std::cout; // 写法同p1.operator<<(std::cout);

    return 0;
}

Author: Moule Lin
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Moule Lin !
  TOC