我在设计课程时遇到问题;
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<<
或其他部分是否有问题?
答案 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
,它会打印您想要的内容。试试吧。