在使用x、y坐标时,将两个矢童相加将非常简单,只要将两分量相加,得到最终的x分量;将两个y分量相加,得到最终的y分量即可。根据这种描述,可能使用下面的代码:
<span style="font-size:14px;">Vector Vector::operator+(const Vector & b)const
{
vector sum;
sum.x=x+b.x;
sum.y=y+b.y;
return sum; // incomplete version
}</span>
如果对象只存储x和y分量,则这很好。遗憾的是,上述代码无法设置极坐标值。可以通过添加另外一些代码来解决这种问题:
<span style="font-size:14px;">Vector Vector::operator+ (const Vector & b) const
{
Vector sum;
sum.x=x+b.x;
sum.y=y+b.y;
sum.set_ang(sum.x, sum.y);
sum.set_mag(sum.x, sum.y);
return sum;// version duplicates needlessly
}</span>
使用构造函数来完成这种工作,将更简单、更可靠:
<span style="font-size:14px;">Vector Vector::operato+ (const Vector & b) const
{
returnVector(X+b.x,y+b.y);// return the constructed Vector
}</span>
上述代码将新的x分量和y分量传递给Vector构造函数,而后者将使用这些值来创建无名的新对象,并返回该对象的副本。这确保了新的Vector对象是根据构造函数制定的标准规则创建的。
提示:如果方法通过计算得到一个新的类对象,则应考虑是否可以使用类构造函數来完成这种工作。这样做不仅可以避免麻烦,而且可以确保新的对象是按照正确的方式创建的。