演算子オーバーロード | Programming Place Plus 用語集

トップページ用語集

名称 🔗

解説 🔗

プログラミング言語において、言語に用意されている標準の演算子に対して、標準とは異なる動作を定義する機能です。

オーバーロード(多重定義)は、同じ名前の関数メソッドなどを複数定義し、使い分ける仕組みのことです。演算子オーバーロードは、演算子が行う処理を関数とみなしたとき(演算子関数)、その関数をオーバーロードしているものといえます。

演算子オーバーロードによって、演算子をに応じた直感的な動作に変更できるため、うまく使えば、自然なコードを記述できる有用な機能になります(行列やベクトル、複素数、日付や時間の演算など)。また、演算子の本来の動作と異なっていても、演算子からイメージする意味合いや、演算子の形状などを利用した演算子オーバーロードの例もいくつか存在します(+文字列を結合する、/ファイルパスの区切りに使う、<<>>入出力の意味で使うなど)。

一方で、それぞれの演算子がもつ自然なイメージに反した動作にも変更できてしまうため、分かりづらいコードにならないように、使い方に注意が必要です(+ で減算し - で加算するなど)。

演算子オーバーロードを実現する具体的な方法や、そもそも演算子オーバーロードが可能であるかどうかについては、プログラミング言語の種類によって異なります。どの演算子を対象にできるかや、その際のオペランドの型として何が使えるかといった点にも違いがあります。

C++ の場合

C++ では、「operator 演算子」という名称の関数を定義することによって、演算子オーバーロードが行えます。演算子の種類ごとに、静的でないメンバ関数として定義しなければならなかったり、非メンバ関数でなければならなかったり、そもそもオーバーロードが許されなかったりする場合があります。

詳細は、新C++編「演算子のオーバーロード」のページを参照してください。

以下に、簡単なサンプルプログラムを示します。このプログラムでは、Pointクラスを作成し、+ 演算子をオーバーロードして、2つのPointオブジェクトを加算できるようにしています。

class Point {
public:
    Point(int x, int y) : m_x(x), m_y(y)
    {}

    Point operator+(const Point& other) const
    {
        return Point(m_x + other.m_x, m_y + other.m_y);
    }

private:
    int m_x;
    int m_y;
};


参考リンク 🔗

更新履歴 🔗


用語集のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る