増分と減分の多重定義

C++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);
}
 
 

前置減分演算子と後置減分演算子は、対応する増分演算子と 同じ規則に従います。

関連参照

IBM Copyright 2003