2016-03-09 70 views
1

我正在檢查某人的代碼,並提出了兩個有趣的運算符重載方法。我不清楚爲什麼編碼器必須編寫第二種方法。爲什麼在Vector3D類中有相同的操作有兩種不同類型的操作符重載?

第一:

inline Vector3D operator-(const Vector3D &a, const Vector3D &b) { 
     return Vector3D(a.getX() - b.getX(), a.getY() - b.getY(), a.getZ() - b.getZ()); 
    } 

二:

inline Vector3D operator-(const Vector3D &a) { 
     return Vector3D(-a.getX(), -a.getY(), -a.getZ()); 
    } 

我明白第一個是在這裏做,但需要在第二個方法呢?如果是,它有什麼作用?

回答

2

第二個是一元運算符。它允許你否定矢量,將它反射到原點到相反的八分圓中。

如果我們猜測,類有一個合理的構造函數和拷貝構造函數,那麼:

Vector3D v(1,1,1); 
Vector3D negatedV = -v; 
+0

你如何使用它來否定矢量? –

+0

剛剛添加了一個示例。 –

+0

爲什麼它只是應該否定向量而引用一個參數? 聲明: Vector3D negatedV = -3v 不能正常工作? –

相關問題