类成员函数返回类型

class member function return type

本文关键字:返回类型 函数 成员      更新时间:2023-10-16

我在设计一个类时遇到了一个问题;

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();

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

然后改变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<<或其他部分有问题?

From

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

和您期望从[1.0,2.0,3.0]得到[0.5,1.0,1.5],我假设您希望您的类包装一个支持算术运算的向量?操作符重载是您的朋友。再给一个提示,如果您重载操作符/,使其将底层向量值除以rhs值,那么do()将按照您的要求进行操作。此外,您将不再需要do() -您可以调用cout << object/2,它将打印您想要的内容。试试。