是的,你可以。他們被稱爲轉換運營商:
struct FancyDouble
{
// your things here
operator double() { return this->value; }
};
您可以轉換爲任何類型,而不僅僅是內置類型。它們通常也被標記爲const
(雖然我沒有在這裏做出來顯示核心概念)。
請注意,您的結構(如圖所示)並不完全允許從double
到FancyDouble
的隱式轉換;您的operator=
僅意味着您可以在作業的右側使用雙精度型,但如果您有FancyDouble
函數參數,則它將不起作用,因爲您需要的是一個構造函數,它接受雙精度值,而不是賦值運算符。
void foo(FancyDouble fd);
foo(4.4); // does not work because you can't construct a FancyDouble from a double
// even though you have an assignment operator
你會做這樣的事情:
struct FancyDouble
{
// your things here
FancyDouble(double d) { /* initialization here */ }
};
有了這個,你只需要接受一個FancyDouble
代替double
的operator=
,轉換會自動完成:
struct FancyDouble
{
// your things here
FancyDouble(double d) { /* initialization here */ }
FancyDouble& operator=(FancyDouble fd) { /* assignment here */ }
};
FancyDouble fd = 4.2; // works
fd = 5.5; // also works, because FancyDouble can be constructed implicitly from a double
上面引用的* assignment *操作符的存在與這個事實無關,該類可以在構造過程中用'double'初始化*灰。後者由類構造函數支持。它不涉及賦值運算符。 – AnT