29章 変換演算子

http://www.geocities.jp/ky_webid/cpp/language/029.html

もう何かこの辺の変換のところはややこしいですね。まったく。

演算子オーバーロードだけでは飽き足らず、型への変換までもクラスに定義できるようです。

兎に角実装してみます。

#include <iostream>
using namespace std;

class CSample {
public:
    CSample (float f) : m_f(f) {}
    operator int() const {
        return static_cast<int>(m_f);
    }
private:
    float m_f;
};

int main () {
    CSample obj(3.14f);
    
    // operator int()が呼ばれる
    int i = obj;
    
    cout << i << endl;
    return 0;
}


operator int()という特殊な書き方をすると、int型へキャストされるときの振る舞いを指定できます。

なのでもちろん

int i = static_cast<int>(obj);

と書いても呼ばれます。