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”有什么需要呢?这个函数可以重写为无效函数吗?有什么问题吗?或者它只是一个要遵循的标准?

4

4 回答 4

11

这是一个很好的约定,可以与operator=内置类型的行为保持一致。

使用内置类型,您可以执行以下操作:

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

如果您不返回对 的引用*this,则您的类型将不支持分配链。

于 2012-04-14T10:49:43.717 回答
1

Returning*this允许您像这样链接分配,

SimpleCircle a, b, c(10);
a = b = c;
于 2012-04-14T10:50:22.727 回答
1

这是惯例,请参阅wikipediaRichard Gillam 的链接文章

于 2012-04-14T10:52:13.803 回答
1

它允许您在一个语句中分配多个实例,如下所示:

s1 = s2 = s3;
于 2012-04-14T10:55:25.693 回答