- # C言語/C++入門 > 演算子のオーバーロード
グローバル関数で演算子のオーバーロード
スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
前のページ(operatorキーワード・演算子(オペレーター)のオーバーロード)では、演算子のオーバーロードをクラスのメンバ関数として定義しました。
クラスではなく、グローバル関数としても、演算子のオーバーロードを定義できます。
スポンサーリンク
#include <iostream> // 数字(整数)に100を足す + 演算子をオーバーロード定義 class opt_plus100 { private: int number; // 受け取る数字 public: // コンストラクタ opt_plus100(int num) { number = num; } // + 演算子のオーバーロードを宣言 friend int operator +(opt_plus100&); }; // 単項演算子 + を定義(オーバーロード) int operator +(opt_plus100& obj) { return obj.number + 100; } int main() { opt_plus100 obj_p(42); // オブジェクト生成(インスタンス化) int result = +obj_p; // オーバーロードされた演算子を適用 printf("result = %d\n", result); // 結果の出力 return 0; }
今度は・・・
// 単項演算子 + を定義(オーバーロード) int operator +(opt_plus100& obj) { return obj.number + 100; }
と、演算子 + のオーバーロード定義をグローバル関数として定義しています。
グローバル関数として定義する場合は、注意点が2点あります。
1.関数定義のときに、引数はクラスオブジェクトを参照渡しにする。
2.クラス内の宣言では、friendキーワードを使用する。
演算子のオーバーロードを定義する場合には、引数をオブジェクトの参照渡しにする必要があります。
int型のみなどは、引数として渡すことができません。
上記の例ですと、クラス内のprivateの変数numberにアクセスする必要があるので、friendキーワードを付ける必要があります。
firiendがないと、コンパイルエラーとなります。
「’opt_plus100::number’ : private メンバ (クラス ‘opt_plus100′ で宣言されている) にアクセスできません。」
と、エラーが起こります。
実行結果。
result = 142
スポンサーリンク
>> 次の記事 : オーバーロードが可能な演算子
<< 前の記事 : operatorキーワード・演算子(オペレーター)のオーバーロード
スポンサーリンク