-3

对反对者:我知道这是一个结构不佳的问题。如果您向下滚动到答案,您会发现我发现了问题的根源。虽然这个问题本身可能没有帮助,但我希望答案能帮助遇到类似运算符重载问题的人。问题是它是什么;我无法确定任何可以使这个问题变得更好的编辑或修订。因此,如果您要投反对票,请同时添加建设性评论。谢谢你。


我正在运行以下代码

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

我的 ( friend) << 运算符在这里重载:

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

预期输出:

object contents

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

5452ED48object contents

为什么?

4

2 回答 2

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

在您看来,您似乎必须了解通过引用传递值,因为当您使用“<<”运算符重载时,您不会返回任何值,而是在参数中返回值。

于 2012-04-15T02:33:18.140 回答
0

很抱歉没有提供足够的细节。原来我应该这样做:

doStuff(o, s);
return s;

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

于 2012-04-15T03:17:24.317 回答