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

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

単項演算子のオーバーロード

インクリメントなどの単項演算子オーバーロードできる。やり方は普通の演算子とほぼ変わらないが、インクリメントやデクリメントには前置き、後置きの2種類があるので注意が必要。
たとえば++演算子オーバーロードするとき前置きのプロトタイプは次の通り。

Test Test::operator++();

後置きの場合は次の通り。

Test Test::operator++(int notused);

実際に実装してみたテストプログラムは次の通り。

#include <iostream>
using namespace std;

class Test {
    int mNum;
public:
    Test() { mNum = 0; }
    Test(int num) { mNum = num; }

    Test operator++();
    Test operator++(int notused);
    
    void show() { cout << mNum << endl; }
};

Test Test::operator++()
{
    mNum++;
    return *this;
}

Test Test::operator++(int notused)
{
    Test temp = *this;
    mNum++;
    return temp;
}

int main()
{
    Test a(123), b;

    b = a++;
    a.show();
    b.show();

    b = ++a;
    a.show();
    b.show();
}

実行結果は次の通り。

124
123
125
125

前置きの場合は値をインクリメントして変更した値を返し、後置きの場合は変更前の値を返すようにしている。