可能重复:
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”的需要是什么?这个函数可以重写为空格吗?它有什么问题吗?或者它只是一个标准?
答案 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)
答案 3 :(得分:1)
它允许您在一个语句中分配多个实例,如下所示:
s1 = s2 = s3;