2018年01月23日
《その253》 変換関数
変換関数
前回《252》のプログラムは、
配列クラステンプレート
template <class Type> class Array {
・・・・・・
};
を bool型に特殊化した配列クラステンプレート
template <> class Array<bool> {
・・・・・・
operator bool() const { ・・・・・・ }
・・・・・・
};
についての内容でした。
今回の内容は、基本事項の復習になりますが、変換関数について です。
上に示した、
operator bool() const { ・・・・・・ }
は、変換関数と呼ばれるメンバ関数で、クラスオブジェクトを bool型に変換します。
オブジェクトを Type型に変換する必要性の高いクラスにおいては、
Type型への変換関数 operator Type を定義すると便利な場合があります。
例えば、あるクラスのオブジェクト obj があり、そのクラスで Type型への変換関数が定義されていれば、
Type a = (Type)obj;
Type b = Type(obj);
Type c = static_cast<Type>(obj);
Type d = obj;
といった、明示的、暗黙裏的なキャストが可能になります。
以下は変換関数の例です。
#include <iostream>
using namespace std;
class C {
unsigned char c;
int n;
public:
C(unsigned char x = 0, int y = 0)
: c(x), n(y) { }
// bool型への変換関数
operator bool() {
return (c >> n) & 1U;
}
};
int main()
{
C a[8];
for (int i = 0; i < 8; i++)
a[i] = C('a', i);
for (int i = 7; i >= 0; i--)
// 変換関数のはたらきで、bool型
// への変換が暗黙裏に行われる。
cout << a[i];
cout << '\n';
}
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/7231487
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック