- # C言語/C++入門 > 演算子のオーバーロード
operatorキーワード・演算子(オペレーター)のオーバーロード
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
C++では、演算子をオーバーロードすることが可能です。
オーバーロードは、関数のオーバーロードで紹介しました。
関数だけでなく、+, -, *, / のようなC++の演算子も、オーバーロードして独自の機能を追加することができます。
演算子をオーバーロードするには、関数の名前がC++の演算子であるような、クラスのメンバ関数を定義します。
そして、定義する際には、オーバーロードさせたい演算子の前に”operator”キーワードをつけます。
#include <iostream> // 数字(整数)に100を足す + 演算子をオーバーロード定義 class opt_plus100 { public: int number; // 受け取る数字 // コンストラクタ opt_plus100(int num) { number = num; } // 単項演算子 + を定義(オーバーロード) int operator +() { return number + 100; } }; int main() { opt_plus100 obj_p(25); // オブジェクト生成(インスタンス化) int result = +obj_p; // オーバーロードされた演算子を適用 printf("result = %d\n", result); // 結果の出力 return 0; }
以下の部分で、単項演算子の + をオーバーロードしています。
// 単項演算子 + を定義(オーバーロード) int operator +() { return number + 100; }
+ という名前の関数に、数字に100を加算して、戻り値を返すという機能を定義しています。
呼び出すときは、以下のようにしまして・・
int main() { opt_plus100 obj_p(25); // オブジェクト生成(インスタンス化) int result = +obj_p; // オーバーロードされた演算子を適用 printf("result = %d\n", result); // 結果の出力 return 0; }
まずは、整数の25でコンストラクタを初期化してオブジェクトを作成します。
その後、生成されたオブジェクトobj_pに対して、オーバーロードされている演算子 + を適用します。
「+obj_p」という書き方をしていますが、これは、「obj_p.+()」という通常のメンバ関数呼び出しである「オブジェクト名.メンバ関数名()」という書き方と同等の意味です。
つまり、obj_pの+()というメンバ関数を呼び出すという意味になりますので、数字に100を加算した値が戻り値として返されることになります。
ただし、実際には、「obj_p.+()」という書き方はコンパイルエラーとなります。
これは、+ を operatorキーワードにより、演算子のオーバーロードの意味で定義しているからです。
「+obj_p」と、通常の演算子と同様の書き方が必要となります。
実行結果。
result = 125
参考:C++マニアック,オペレータのオーバーロード,operator overload,演算子のオーバーロード,演算子