自分が定義したクラスのオブジェクトを他の型に変換する時に、その変換過程をみずから定義することができる・・・。
つまり、指定された型に変換するキャスト演算子のオーバーロードといったところ・・・。
こういうのをユーザ定義変換とかユーザ定義型変換とか変換関数とか型変換関数という・・・。
三角形の幅と高さをメンバに持ち、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になっている・・・。