2017年11月03日
《その104》 演算子関数の定義例
データメンバが整数値一つだけの、下記のクラス TinyInt(新版明解C++入門編 p.457)に注釈を加えて自分なりに復習してみました。
// TinyInt.h
------------------------------------------------
#include <climits>
#include <iostream>
class TinyInt {
int v; // テータメンバは整数値一つのみ。
public:
// コンストラクタ(int型から TinyInt型への変換コンストラクタ兼用)
TinyInt(int value = 0) : v(value) { }
// intへの変換関数
// (ユーザ定義変換 … この変換関数 と 上の変換コンストラクタ の総称)
operator int() const { return v; }
// 論理否定演算子! (v == 0 なら true, v != 0 なら false)
bool operator!() const { return v == 0; }
// 前置増分演算子++
// インクリメント後の自分自身への参照 TinyInt& を返却するので、
// 返却値に対して この演算子 ++ を連続使用することができる。
// 例:TinyInt t;
// ++(++t); // t は 2 になる。
TinyInt& operator++() {
if (v < INT_MAX) v++;
return *this;
}
// 後置増分演算子++
// 前置増分演算子++ と同様にインクリメントするが、返却するのは
// インクリメント前の自分自身の値。
TinyInt operator++(int) {
TinyInt x = *this;
if (v < INT_MAX) v++;
return x;
}
// 2項+演算子(クラス内で定義したフレンド関数)
// 仮引数の型は const TinyInt&
// 演算結果である TinyInt型一時オブジェクトの値を返却する。
friend TinyInt operator+(const TinyInt& x, const TinyInt& y) {
return TinyInt(x.v + y.v);
}
// 複号代入+=演算子
// 自分自身への参照 TinyInt& を返却するので、
// 返却値に対して この演算子 += を連続使用することができる。
// 例:TinyInt t;
// (t += 5) += 10; // t は 15 になる。
TinyInt& operator+=(const TinyInt& x) { v += x.v; return *this; }
friend std::ostream& operator<<(std::ostream& s, const TinyInt& x) {
return s << x.v;
}
};
------------------------------------------------
--
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/6927861
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック