next up previous
Next: newとdelete Up: ススンデルCとしてのC++ Previous: メンバ関数

演算子の多重定義

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++本来の機能ではなく,演算子の多重定義 を使って後から定義された機能なのである.



Akinori ITO
Thu Aug 7 15:05:13 JST 1997