在重载operator<<<<<<<<<<<<在C ++中

时间:2015-11-17 09:48:12

标签: c++ operator-overloading overloading

class point //declaration of class
{
    private:
    int x, y;
    friend std::ostream &operator << (std::ostream &input, point &p);
    public:
    //constructors and some other methods
};

//definition of overloading <<
std::ostream &operator << (std::ostream &input, point &p)
{
    input << std::cout << "x = " << p.x << " y = " << p.y << " ";
    return input;
}

它可以工作,但是当我使用它时

std::cout << object;

它在我的文字前显示了一些垃圾:

062ACC3E8x = 1 y = 22

所以062ACC3E8X总会出现。如果我重新启动我正在处理的Visual Studio,这是不同的,所以我想它是一些内存地址。如何摆脱它?我的代码中是缺少还是错误的?

2 个答案:

答案 0 :(得分:3)

您输出了一些地址,因为std::ostreamimplicit void* conversion operator

  

1)如果fail()返回true,则返回空指针,否则返回a   非空指针。这个指针可以隐式转换为bool和   可以在布尔上下文中使用。

应该只是

input << "x = " << p.x << " y = " << p.y << " ";

答案 1 :(得分:1)

您正在将std::cout传递到输出流中。将您的代码更改为:

//definition of overloading <<
std::ostream &operator << (std::ostream &input, point &p)
{
    input << "x = " << p.x << " y = " << p.y << " ";
    return input;
}