プログラミング言語において、言語に用意されている標準の演算子に対して、標準とは異なる動作を定義する機能です。
オーバーロード(多重定義)は、同じ名前の関数やメソッドなどを複数定義し、使い分ける仕組みのことです。演算子オーバーロードは、演算子が行う処理を関数とみなしたとき(演算子関数)、その関数をオーバーロードしているものといえます。
演算子オーバーロードによって、演算子を型に応じた直感的な動作に変更できるため、うまく使えば、自然なコードを記述できる有用な機能になります(行列やベクトル、複素数、日付や時間の演算など)。また、演算子の本来の動作と異なっていても、演算子からイメージする意味合いや、演算子の形状などを利用した演算子オーバーロードの例もいくつか存在します(+
で文字列を結合する、/
をファイルパスの区切りに使う、<<
や >>
を入出力の意味で使うなど)。
一方で、それぞれの演算子がもつ自然なイメージに反した動作にも変更できてしまうため、分かりづらいコードにならないように、使い方に注意が必要です(+
で減算し -
で加算するなど)。
演算子オーバーロードを実現する具体的な方法や、そもそも演算子オーバーロードが可能であるかどうかについては、プログラミング言語の種類によって異なります。どの演算子を対象にできるかや、その際のオペランドの型として何が使えるかといった点にも違いがあります。
C++ では、「operator 演算子」という名称の関数を定義することによって、演算子オーバーロードが行えます。演算子の種類ごとに、静的でないメンバ関数として定義しなければならなかったり、非メンバ関数でなければならなかったり、そもそもオーバーロードが許されなかったりする場合があります。
詳細は、新C++編「演算子のオーバーロード」のページを参照してください。
以下に、簡単なサンプルプログラムを示します。このプログラムでは、Pointクラスを作成し、+
演算子をオーバーロードして、2つのPointオブジェクトを加算できるようにしています。
class Point {
public:
(int x, int y) : m_x(x), m_y(y)
Point{}
operator+(const Point& other) const
Point {
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で書く |
![]() |
管理者情報 | プライバシーポリシー |