2017年11月12日
《その119》 2項演算子の多重定義
2項演算子の多重定義
次のプログラムで、
operator+=(const C& x), operator+(const C& x, const C& y) は、それぞれ、
・C型用の複号代入+=演算子関数(2項演算子, メンバ関数)、
・C型用の加算+演算子関数(2項演算子, 非メンバ関数)、
です。
2項演算子関数(メンバ関数では引数 1個)
返却値型 operator演算子(b)
2項演算子関数(非メンバ関数では引数 2個)
返却値型 operator演算子(a, b)
------------------------------------------------------------
#include <iostream>
class C {
int a_;
int b_;
public:
C(int a, int b = 0) // ★ 変換コンストラクタを兼ねる。
: a_(a), b_(b) { }
int a() const { return a_; }
int b() const { return b_; }
C& operator+=(const C& x) {
a_ += x.a_;
b_ += x.b_;
return *this;
}
};
C operator+(const C& x, const C& y) {
C temp(x.a() + y.a(), x.b() + y.b());
return temp;
}
int main() {
C s( 1, 2);
C t(10, 10);
s += t;
t += 10; // ※1.
C u = -10 + t; // ※2.
std::cout << s.a() << " " << s.b() << '\n';
std::cout << t.a() << " " << t.b() << '\n';
std::cout << u.a() << " " << u.b() << '\n';
}
------------------------------------------------------------
【重要】このプログラムで、※1 や※2 の演算が可能なのは、★の変換コンストラクタがあるからです。
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/6960483
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック