【问题标题】:Can't get rid of trash while overloading operator << in C++在 C++ 中重载运算符 << 时无法清除垃圾
【发布时间】:2015-11-17 09:48:11
【问题描述】:
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 是不同的,所以我想这是一些内存地址。如何摆脱它?我的代码中是否缺少某些内容或错误?

【问题讨论】:

  • input &lt;&lt; std::cout &lt;&lt; WTF?在不了解其工作原理的情况下随意输入内容不会让您走得太远......
  • 这不是随机输入的内容,只是一个错误。

标签: c++ operator-overloading overloading


【解决方案1】:

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

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

应该只是

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

【讨论】:

  • 是的,它有效。谢谢你解释那里发生了什么。
【解决方案2】:

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

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

【讨论】:

  • 太棒了!有效。现在可以肯定了。我在将 std::cout 传递到流中做了什么?是地址吗?做什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
  • 1970-01-01
  • 2015-07-13
  • 2015-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多