重载<<操作员打印地址

时间:2012-04-15 02:06:14

标签: c++ debugging console operator-overloading ostream

向下选民:我知道这是一个构造不良的问题。如果你向下滚动到答案,你会发现我发现了问题的根源。虽然这个问题本身可能没什么帮助,但我希望这个答案可以帮助那些遇到运算符重载问题的人。问题在于它是什么;我无法确定任何可以使这个问题变得更好的编辑或修订。因此,如果您要提交投票,请添加建设性意见。谢谢。


我正在运行以下代码

myObject o = myObject();
cout << o << endl;

我的(friend)&lt;&lt;运算符在这里超载:

ostream& operator << (ostream& s, myObject o)
{
    s << doStuff(o, s) << endl;
    return s;
}

预期产出:

object contents

由于某种原因,实际输出包括内存地址:

5452ED48object contents

为什么?

2 个答案:

答案 0 :(得分:0)

我们无法理解你想做什么......我理解这样的事情:

#include <iostream>
using namespace std;

class obj{

    friend ostream&operator<<(ostream &out, const obj o);
public:
    obj(int a);
    int change_data();
private: 
    int s;
    int d;

};

obj::obj(int a)
{
    s = a;
    d = s;
}

int obj::change_data()
{
    return 99;
}

ostream&operator<<(ostream &out, const obj o){
    out << o.s;
    out << " ";
    out << o.d;
}

int main(int argc, char **argv) {
    obj some(1);
    cout << some;
    return 0;
}

输出:

  

1 1

您似乎必须了解通过引用传递值,因为当您使用“&lt;&lt;”操作符重载时不返回任何值,您将在参数中返回值。

答案 1 :(得分:0)

很抱歉没有提供足够的细节。事实证明我应该这样做:

doStuff(o, s);
return s;

显然我正在将所需的输出附加到已包含地址的s