C++ では,+や-のような演算子も多重定義することが できる.例えば,上記の2次元ベクトルの加算を定義してみよう.
vector2D operator +(vector2D a, vector2D b)
{
vector2D c;
c.x = a.x+b.x;
c.y = a.y+b.y;
return c;
}
これで,vector2D型のデータ同士の加算が定義された.
これを定義しておけば,整数や実数の加算と全く同じ記述で,
vector2D型のデータの演算ができる.これと同じように,
C++では,ほとんどの演算子の多重定義が可能だ.多重定義できない
のは,三項演算子?:とsizeof,.など
数個しかない.キャスト演算子や,->など
も多重定義可能だ.
演算子をメンバ関数として定義することもできる.上記の例は,
struct vector2D {
...
vector2D operator +(vector2D b) {
vector2D c;
c.x = x+b.x;
c.y = y+b.y;
return c;
}
};
と書いても同じだ.この場合,operator +の引数が1つしかない
のに注目してほしい.+の左の項は,thisに対応している.
演算子の多重定義をうまく使っている例が,C++標準ライブラリの1つ である複素数ライブラリだ.C++では,FORTRANと同じように複素数を 扱うことができるが,これはC++本来の機能ではなく,演算子の多重定義 を使って後から定義された機能なのである.