1 個のクラス型の引き数かクラス型への参照を持つ非メンバー関数演算子を使用して、
あるいは引き数のないメンバー関数演算子を使用して、前置増分演算子 (++) を多重定義します。
次の例では、増分演算子は以下に示す両方の方法で多重定義されます。
class X { public: // member prefix ++x void operator++() { } }; class Y { }; // non-member prefix ++y void operator++(Y&) { } int main() { X x; Y y; // calls x.operator++() ++x; // explicit call, like ++x x.operator++(); // calls operator++(y) ++y; // explicit call, like ++y operator++(y); }
2 つの関数実引き数 (1 番目はクラス型、2 番目は型 int を持っている) 持つ非メンバー関数演算子 operator++() を宣言することによって、 あるクラス型に対して、後置増分演算子 (++) を多重定義することができます。 あるいは、型 int の 1 個の引き数を持つ、 メンバー関数演算子 operator++() を宣言することができます。 コンパイラーは int 引き数を使用して、前置増分演算子と後置増分演算子を区別します。 暗黙の呼び出しの場合、デフォルト値はゼロです。
次に例を示します。
class X { public: // member postfix x++ void operator++(int) { }; }; class Y { }; // nonmember postfix y++ void operator++(Y&, int) { }; int main() { X x; Y y; // calls x.operator++(0) // default argument of zero is supplied by compiler x++; // explicit call to member postfix x++ x.operator++(0); // calls operator++(y, 0) y++; // explicit call to non-member postfix y++ operator++(y, 0); }
前置減分演算子と後置減分演算子は、対応する増分演算子と 同じ規則に従います。
関連参照