13.11 Overloading typecasts


https://www.learncpp.com/cpp-tutorial/overloading-typecasts/
C++は、一般的なbuild-inデータ型をタイプ変換する方法を知っているので問題ありません.しかし、user-defined typeについては、どうすればいいのでしょうか.
だからtypecastには過負荷がある
User-defined conversions allow us to convert our class into another data type. Take a look at the following class:
class Cents
{
private:
    int m_cents;
public:
    Cents(int cents=0)
        : m_cents{ cents }
    {
    }

    int getCents() const { return m_cents; }
    void setCents(int cents) { m_cents = cents; }
};
上のクラスはかなり簡単です
しかし、上のクラスをint typeに変更したい場合は、どうすればいいのでしょうか.
class Cents
{
private:
    int m_cents;
public:
    Cents(int cents=0)
        : m_cents{ cents }
    {
    }

    // Overloaded int cast
    operator int() const { return m_cents; }

    int getCents() const { return m_cents; }
    void setCents(int cents) { m_cents = cents; }
};
カッコオペレータではなくオペレータint()が表示されます.
オーバーロードには3つの注意事項があります
1.クラスにoperator int()という新しい関数を作成し、クラスをintに変換する関数を再ロードします.operatorという言葉と私たちが選択するタイプの間にスペースがあることに注意してください.
2.パラメータを渡すことができないため、ユーザー定義の変換はパラメータを使用しません.
3. User-defined conversions do not have a return type. C++ assumes you will be returning the correct type.
戻りタイプが無効です!!本来、オペレータテキストの前にreturn type(関数のように)があり、c++はプログラマがうまく処理すると仮定します.
ここでは、DollarsclassをCentsclassに変換するリロードの例があります.
class Dollars
{
private:
    int m_dollars;
public:
    Dollars(int dollars=0)
        : m_dollars{ dollars }
    {
    }

     // Allow us to convert Dollars into Cents
     operator Cents() const { return Cents{ m_dollars * 100 }; }
};
上のコードでDollarsをCentsに直接変換できます
#include <iostream>

class Cents
{
private:
    int m_cents;
public:
    Cents(int cents=0)
        : m_cents{ cents }
    {
    }

    // Overloaded int cast
    operator int() const { return m_cents; }

    int getCents() const { return m_cents; }
    void setCents(int cents) { m_cents = cents; }
};

class Dollars
{
private:
    int m_dollars;
public:
    Dollars(int dollars=0)
        : m_dollars{ dollars }
    {
    }

    // Allow us to convert Dollars into Cents
    operator Cents() const { return Cents { m_dollars * 100 }; }
};

void printCents(Cents cents)
{
    std::cout << cents; // cents will be implicitly cast to an int here
}

int main()
{
    Dollars dollars{ 9 };
    printCents(dollars); // dollars will be implicitly cast to a Cents here

    std::cout << '\n';

    return 0;
}
ドルは暗黙的にCentsタイプに変換されます.
std::cout<900
しゅつりょく