类成员函数返回类型

时间:2015-09-16 06:13:16

标签: c++

我在设计课程时遇到问题;

class A
{
    friend ostream& operator<<(ostream& os, const A rhs);
public: 
    A do()
    { 
       A newobject;
       newobject = *this/2
       return newobject;
    }
private:
    vector<double>
}

假设我有A object{1.0,2.0,3.0},那么object.do()应为{0.5,1.0,1.5}

然而,当我想打印结果时

A object
cout<<object<<object.do();

它会导致错误,似乎在调用成员函数newobject后删除了object.do()

然后我更改了do()函数

A& do()
{ 
   return *this/2
}

然后cout<<object<<object.do(); 结果是[0.5,1.0,1.5][0.5,1.0,1.5]

预期结果应为[1.0,2.0,3.0][0.5,1.0,1.5]

我有一些问题: 1.如何获得预期的结果? 2.对于第二个do()函数,cout结果为[0.5,1.0,1.5][0.5,1.0,1.5]的原因。 do()函数更改了对象的成员,但在调用cout之前我object object.do()。我认为第二种情况应该得到预期的结果。我想知道重载的operator<<或其他部分是否有问题?

1 个答案:

答案 0 :(得分:0)

A& do()
{ 
   return *this/2
}

并期望从[0.5,1.0,1.5]获得[1.0,2.0,3.0],我假设你希望你的类包装一个支持算术运算的向量? Operator overloading是你的朋友。再给一个提示,如果你重载运算符/,使它将基础向量值除以rhs值,do()将做你想要的。此外,您不再需要do() - 您可以致电cout << object/2,它会打印您想要的内容。试试吧。