変換関数
オブジェクトの変換
あるクラスのオブジェクトの型の変換で
他のオブジェクト型やデータ型に暗黙的に変換する場合
有効な手段として考えられるのが、演算子のオーバーロードだと思います
しかし、オブジェクトの型変換がとくにデータ型などであれば
もっとも有効なのは 変換関数 です
これは、演算子のオーバーロードのように型変換をオーバーロードするようなものです
変換関数の宣言は operator キーワードを用います
これに、オブジェクトを変換する目的の型を関数名とします
operator type() {...
このメンバ関数は、必ず戻り値は関数名の型でなければいけません
operator int() であれば、戻り値は整数型です
データ型や他のクラス型に変換すると便利であろうクラスなどにこの機能を用いると
非常に簡単に型の変換を実装することができます
当然変換関数は、変換を行うクラスのメンバである必要があります
#include<iostream>
using std::cout;
class RGB {
unsigned char r , g , b;
public:
RGB(unsigned char r , unsigned char g , unsigned char b) {
this->r = r;
this->g = g;
this->b = b;
}
operator int() { return (r << 16) + (g << 8) + b; }
};
int main() {
RGB color(125 , 100 , 5);
int i = color;
cout << i;
return 0;
}
このプログラムは、加法混色の色彩表現を管理するクラスです
それぞれ、赤、緑、青の順番で r , g , b というメンバ変数を持ちます
開発によりますが、例えば開発しているシステムの色を管理する関数が
符号なし32ビットで色を表現する場合、このような整数への変換が役に立ちます
operator int() { return (r << 16) + (g << 8) + b; }
これが、このプログラムでの変換関数になります
この関数は、オブジェクトを整数型に変換しようとした時に呼び出されます
プログラムでは、int i = color で呼び出されていますね
変換関数が呼び出されると、定義されている処理をし
最終的には、目的の型が返されます
このプログラムでは、各メンバを所定位置にシフトして整数値としてまとめています
疑わしければ、シフトするなどして変数 i を再び分解してみると面白いでしょう