インクリメントなどの単項演算子もオーバーロードできる。やり方は普通の演算子とほぼ変わらないが、インクリメントやデクリメントには前置き、後置きの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
前置きの場合は値をインクリメントして変更した値を返し、後置きの場合は変更前の値を返すようにしている。