ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

演算子のオーバーロード

本を読みながらC++の勉強。10ページ。今回は演算子オーバーロードについて。
演算子オーバーロードは次のような形式で定義する。

型 クラス名::operator#(引数)
{
}

#の部分にオーバーロードしたい演算子が入る。たとえば+や=など。
実際に3次元ベクトルのクラスを作って+と=の演算子オーバーロードしたサンプル。

#include <iostream>
using namespace std;

class Vector3 {
private:
    int x,y,z;
public:
    Vector3() { x = y = z = 0; }
    Vector3(int a, int b, int c) { x = a; y = b; z = c; }

    Vector3 operator+(Vector3 p);
    Vector3 operator=(Vector3 p);

    void show() { cout << x << ' ' << y << ' ' << z << '\n'; }
};

Vector3 Vector3::operator+(Vector3 p)
{
    Vector3 temp;
    temp.x = x + p.x;
    temp.y = y + p.y;
    temp.z = z + p.z;
    return temp;
}

Vector3 Vector3::operator=(Vector3 p)
{
    x = p.x;
    y = p.y;
    z = p.z;
    return *this;
}

int main()
{
    Vector3 v1(1,2,3), v2(4,5,6), v3;

    v3 = v1 + v2;
    v3.show();

    v3 = v1;
    v3.show();

    return 0;
}

実行結果
5 7 9
1 2 3

普通の+演算子の動作と同じようにオブジェクトの値が変えないためtempを作ってそれに加算処理を行っている。=演算子の場合はオブジェクトの値を変えて、そのオブジェクト自身を返すようにしている。