ユーザ定義変換

自分が定義したクラスのオブジェクトを他の型に変換する時に、その変換過程をみずから定義することができる・・・。
つまり、指定された型に変換するキャスト演算子オーバーロードといったところ・・・。
こういうのをユーザ定義変換とかユーザ定義型変換とか変換関数とか型変換関数という・・・。

三角形の幅と高さをメンバに持ち、doubleでオブジェクトをキャストすると、斜辺の長さ、つまり平方根を返すクラスclass_square_rootを定義・・・。

コンストラクタで三角形の幅と高さをメンバにセット・・・。
operator double()は、powでx_, y_をそれぞれ二乗して足したものをsqrtで平方根を取った・・・。

class_square_rootオブジェクトcsrのコンストラクタに3と4を渡す・・・。
あとはdにcsrのdoubleキャストした値を渡す・・・
もっとも、dはdoubleなので明示しなくてもいいが、わかりやすくするためにあえて付けた・・・。

$ vi user_defined_conversion.cpp
$ g++ -o user_defined_conversion user_defined_conversion.cpp square_root.cpp
$ ./user_defined_conversion
d = 5
$

3の二乗は9、4の二乗は16、足すと25でその平方根は5・・・。
確かに5になっている・・・。

Sample/cpp/user_defined_conversion/user_defined_conversion/src/user_defined_conversion at master · bg1bgst333/Sample · GitHub