operatorキーワード・演算子(オペレーター)のオーバーロード

はてなブックマークに追加はてなブックマーク Yahoo!ブックマークに登録 ニフティクリップに追加 Livedoor クリップに追加 BuzzurlにブックマークBuzzurlにブックマーク Twitterに投稿  

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,演算子のオーバーロード,演算子


日時: 2008年06月16日 13:02
コメントを投稿






トラックバック

■この記事のトラックバックURL:
http://www.mapee.jp/mpe334/mt-tb.cgi/268

この記事にトラックバックされる方は、参照先が分かるようにするために、「operatorキーワード・演算子(オペレーター)のオーバーロード」へのリンクをお願いいたします。
以下のHTMLタグをトラックバック送信元ページ内に挿入して下さい。



※この記事へのリンクがない、また関連のないページからのトラックバックは反映されませんので、ご了承下さい。






あわせて読みたいブログパーツ
フィードメーター - C言語とC++勉強ルーム