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(&quot;result = %d\n&quot;, result);    // 結果の出力
    return 0;
}

まずは、整数の25でコンストラクタを初期化してオブジェクトを作成します。
その後、生成されたオブジェクトobj_pに対して、オーバーロードされている演算子 + を適用します。
「+obj_p」という書き方をしていますが、これは、「obj_p.+()」という通常のメンバ関数呼び出しである「オブジェクト名.メンバ関数名()」という書き方と同等の意味です。

つまり、obj_pの+()というメンバ関数を呼び出すという意味になりますので、数字に100を加算した値が戻り値として返されることになります。
ただし、実際には、「obj_p.+()」という書き方はコンパイルエラーとなります。
これは、+ を operatorキーワードにより、演算子のオーバーロードの意味で定義しているからです。
「+obj_p」と、通常の演算子と同様の書き方が必要となります。

実行結果。

result = 125

参考:C++マニアック,オペレータのオーバーロード,operator overload,演算子のオーバーロード,演算子

スポンサーリンク
 
スポンサーリンク