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