0

c++ でベクトル クラスを作成しようとしています。* 演算子を次のようにオーバーロードしました。

class vector2
{
public:
    vector2(float x, float y);

    static vector2 vector_zero;

    float x, y;
    float length() const;
    string to_string();

    vector2 operator+(vector2 other);
    vector2 operator*(float other);
};

vector2 vector2::operator*(float other)
{
    return vector2(x * other, y * other);
}

「vector2(3,4) * 2」と書いてもうまくいきますが、「2 * vector(3,4)」と書いてもうまくいきたいです。どうやってやるの?

4

1 に答える 1

0

operator*次のように (クラスの外で)別のものを作成する必要があります。

vector2 operator*(float other, vector2 v){
  return v*other;
}

サイドノート:

const多くの宣言を忘れてしまったので、&クラスには参照 ( ) を使用することもお勧めします。inlineこれらの関数は非常に小さいため、これらの関数も作成します。

class vector2
{
public:
...
  string to_string() const;
  inline vector2 operator+(const vector2 &other)const;
  inline vector2 operator*(float other)const;
};

inline vector2 operator*(float other, const vector2 &v){
  return v*other;
}
于 2013-07-18T15:43:59.603 に答える