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:
しかし、上のクラスをint typeに変更したい場合は、どうすればいいのでしょうか.
オーバーロードには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に変換するリロードの例があります.
std::cout<900
しゅつりょく
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<
しゅつりょく
Reference
この問題について(13.11 Overloading typecasts), 我々は、より多くの情報をここで見つけました https://velog.io/@ikmy0ung/13.11-Overloading-typecastsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol