【问题标题】:return type of overloading assignment operator in c++ [duplicate]C ++中重载赋值运算符的返回类型[重复]
【发布时间】:2012-04-26 12:49:56
【问题描述】:

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

【问题讨论】:

    标签: c++ operator-overloading


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 并在这个问题上引用 Scott Meyers:“如果有疑问,请按照 int 的方式去做”:-)
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        s1 = s2 = s3;
        

        【讨论】:

          猜你喜欢
          • 2021-02-20
          • 1970-01-01
          • 2011-05-02
          • 1970-01-01
          • 2017-10-07
          • 1970-01-01
          • 2013-03-30
          • 2016-08-30
          • 1970-01-01
          相关资源
          最近更新 更多