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

时间:2012-04-14 10:45:12

标签: c++ operator-overloading

  

可能重复:
  Why must the copy assignment operator return a reference/const reference?
  Operator= overloading in 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 个答案:

答案 0 :(得分:10)

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

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

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

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

答案 1 :(得分:1)

返回*this允许您链接这样的分配,

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

答案 2 :(得分:1)

这是惯例,请参阅wikipedialinked article by Richard Gillam

答案 3 :(得分:1)

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

s1 = s2 = s3;