【发布时间】:2013-11-16 09:26:58
【问题描述】:
假设我想重载一个运算符 ==。我有一个类向量和以下方法:
bool operator ==( const Vector & v )
{
if(( this->x == v.x ) &&( this->y == v.y ) )
return true;
else
return false;
}
为什么我需要将一个对象(在本例中为 v)作为常量地址传递给该对象?我知道 - const 强制程序员不要修改传递的对象,但为什么 &?
我的第二个问题涉及运算符重载,例如 +=、*= 等。 请看这段代码:
Vector operator +( const Vector & v )
{
return Vector( this->x + v.x, this->y + v.y );
}
// vs
Vector & operator +=( const Vector & v )
{
this->x += v.x;
this->y += v.y;
return * this;
}
在第二种情况下,我们也可以返回一个新对象。为什么我们返回相同的、递增的对象?
【问题讨论】:
-
A) 这样您就不会在不需要时制作副本。 B)所以你可以传递一个派生类型并获得动态调度。
-
+= 返回一个值,使其能够以与内置运算符相同的方式使用(“do as the ints do”)。
a = (b += c)在异常用法时是有效的。 -
operator==的正文可以简化为{ return x == v.x && y == v.y; }
标签: c++ visual-studio-2010 operator-overloading