C++には、演算子のオーバーロードという機能があります。
これは、既存の演算子を再定義して、新しい意味を持たせることができます。
この記事では、C++の演算子のオーバーロードについてわかりやすく詳しく解説します。
初心者でも理解しやすいように、サンプルコードも含めて説明します。C++プログラミングを学ぶ上で重要な知識ですので、ぜひ読んでみてください。
C++の演算子のオーバーロードとは
C++では、既存の演算子を再定義することができます。これを演算子のオーバーロードと呼びます。オーバーロードされた演算子は、ユーザー定義型に対しても使用できるようになります。
例えば、+
演算子をオーバーロードすることで、自分で作成したクラスのインスタンス同士を足し合わせることができます。
#include<iostream>
class MyClass {
public:
int value;
MyClass operator+(const MyClass& other) const {
MyClass result;
result.value = this->value + other.value;
return result;
}
};
int main() {
MyClass a, b, c;
a.value = 1;
b.value = 2;
c = a + b; // オーバーロードされた+演算子が使われる
std::cout << c.value << std::endl; // 出力: 3
}
上記の例では、MyClass
クラスにoperator+
関数を定義しています。
本来であればクラスの同士の足し算はできませんが、このサンプルコードでは演算子+
をオーバーロードして処理を実装しているため、引数として別のMyClass
インスタンスを受け取り、それらの値を足し合わせた新しいインスタンスを生成することができるようになっています。
このように、オペレーターのオーバーロードはC++プログラマーにとって非常に便利な機能です。
しかし、過剰な使用はコードの可読性や保守性に悪影響を与える可能性があるため注意が必要です。
オーバーロード可能な演算子の種類
C++では、以下の演算子がオーバーロード可能です。
- 代入演算子
=
- 算術演算子
+
,-
,*
,/
,%
- 比較演算子
==
,!=
,<
,>
,<=
,<=
- 論理演算子
!
,&&
,||
- ビット演算子
&
,|
,^
,~
- シフト演算子
<<
,>>
- 関数呼び出し演算子
()
- アドレス取得演算子
&
- 間接参照演算子
*
これらの演算子をオーバーロードすることで、ユーザー定義型に対して自然な振る舞いを実現することができます。
演算子のオーバーロードの方法
メンバ関数として演算子をオーバーロードする場合は、クラス内に演算子の定義を記述します。以下は、+
演算子をオーバーロードした例です。
class MyClass {
public:
int value;
MyClass operator+(const MyClass& other) const {
MyClass result;
result.value = this->value + other.value;
return result;
}
};
このように定義することで、MyClass
クラスのインスタンス同士を+
演算子で足し合わせることができます。
MyClass a, b;
a.value = 1;
b.value = 2;
MyClass c = a + b; // c.valueは3になる