26.1 演算子多重定義の概要
/* 演算子関数 */
XYdata d1, d2, d3;
d3 = d1 + d2;
のような記述が可能になります。
演算子の多重定義は、
演算子関数(operator関数)
を用いて記述します。
演算子多重定義
型 operator◯(引数並び){(必要な演算処理)}
/* 多重定義できる演算子 */
多重定義できない演算子
. .* :: ?:
26.2 メンバ関数による演算子多重定義
26.3 一般関数による演算子多重定義
26.4 フレンド関数による演算子多重定義
26.5 非クラス要素に対応する演算子多重定義
26.6 変換コンストラクタがない場合の演算子関数
obj+数値に対する演算子関数(変換コンストラクタがない場合)
XYpos XYpos::operator+(int xdt)
{
return XYpos(x + xdt, y);
}
26.7 演算子関数の明示的呼び出し
operator+の暗黙の利用
dd = d1 + d2;
operator+がメンバ関数である場合の明示的利用
dd = d1.operator+(d2);
operator+が一般関数である場合の明示的利用
dd = operator+(d1, d2);
26.8 参照仮引数と参照戻り値を使った演算子関数
/* 参照の仮引数 */
XYpos XYpos::operator+(XYpos &ob2)
{
return XYpos(x + ob2.x, y + ob2.y);
}
XYpos XYpos::operator+(const XYpos &ob2)
{
return XYpos(x + ob2.x, y + ob2.y);
}
/* 参照の戻り値 */
XYpos &XYpos::operator+(XYpos &ob2)
{
static XYpos wk;
wk.x = x + ob2.x;
wk.y = y + ob2.y;
return wk;
}
/* 参照戻り値の問題 */
省略
26.9 単項演算子の多重定義
26.10 インクリメント/デクリメント演算子の多重定義
26.11 関係演算子の多重定義
26.12 入出力演算子の多重定義
26.13 複合代入演算子の多重定義
26.14 代入演算子の多重定義
/* コピーコンストラクタとコピー代入 */
/* 自己代入の防止 */
省略
26.15 添字演算子[]の多重定義
26.16 関数呼び出し演算子()の多重定義
26.17 new/delete演算子の多重定義
/* new/deleteの多重定義ルール */
class XYpos {
...
void *operator new(size_t memsize);
void *operator new[](size_t memsize);
void operator delete(void *p);
void operator delete[](void *p);
}
/* new/delete関数の呼び出し方法 */
省略
/* new/delete関数の実装例 */
/* 付加価値のあるnew演算子 */
省略