最近工作上 常用到 C++ , 一段時間沒寫有些東西有點忘了
C++ 有提供一個功能讓我們可以定義運算子 就是使用到 operator
最近寫了一個 GameVector 而這個 vector 包含了二個變數 分別是 x ,y
而常用到 GameVector _a(10,10) , GameVector _b(50,70)
_a = _a - _b , 或 _a = _a + _b
所以要怎麼寫呢?
GameVector operator- (const GameVector &v) const{return GameVector(x - v.x, y - v.y);}
這裡要注意的是我們這裡寫的 運算子 都是在 右手邊
也就是 傳進來的 v 是在右手邊
所以 _a = _a - _b , 這裡的 v 是 _b , 而 _a 就是此次觸發的物件
所以也可以二個運算子一起合用的
GameVector& operator-= (const GameVector &v) {x-=v.x;y-=v.y; return *this;}
現在用個問題是 如果要乘的話呢?
底下的寫法就可以解決 , 但是因為運算子是在右手邊
GameVector operator* (const int v) const{return GameVector(x * v, y * v);}
所以只能 像這樣的寫法
GameVector *g = new GameVector(10,20);
GameVector *m = new GameVector(5,10);
*g = *m *2 ;
那如果要右手邊跟左手邊都可以就要
class GameVector{
};
inline GameVector operator*(const float s, const GameVector &v) { return v*s; }
寫成這樣