C++中重载赋值运算符的返回类型

4

可能是重复问题:
为什么赋值运算符必须返回引用/常量引用?
C++中的操作符=重载

我已经问过一个关于这个赋值运算符重载的问题。我可能在问一个愚蠢的问题。请原谅。

我的类声明如下:

class Circle
{
    public:
       Circle();
       Circle(const Circle &);
       Circle(unsigned short rad);
       unsigned short getRadius() const { return itsradius; }
       void setRadius(unsigned short rad) { itsRadius = rad; }
    private:
       unsigned short itsRadius:
};

我的类定义:

Circle::Circle()
{
   itsRadius = 0;
}
Circle::Circle(unsigned short rad)
{
   itsRadius = rad;
}
Circle::Circle(const Circle & rhs)
{
   itsRadius = rhs.getRadius();
}

我正在这样重载赋值运算符:

SimpleCircle & SimpleCircle::operator=(const SimpleCircle & rhs)
{
   itsRadius = rhs.getRadius();
   return *this;
}

当我们在像“itsRadius = rhs.getRadius()”这样的当前对象上工作时,当前对象的半径将会被更改,那么,返回“*this”的必要性是什么?这个函数能够重写为void吗?它有任何问题吗?还是只是需要遵循标准?
4个回答

11

这是一个很好的惯例,遵循它可以与内置类型的operator=行为保持一致。

对于内置类型,您可以像这样进行操作:

int a, b, c;
// ...
a = b = c = 10;

如果你不返回对*this的引用,你的类型就不支持赋值链。


5
引用Scott Meyers的话来说:“如果有疑问,就像int类型一样去做” :-) - cli_hlt

1

1

它允许您在一个语句中像这样分配给多个实例:

s1 = s2 = s3;

1

返回 *this 允许你像这样链接赋值操作,

SimpleCircle a, b, c(10);
a = b = c;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接