2013-06-05 42 views
0

實現從自定義類到POD或其他類型的轉換非常簡單。它在自定義類本身中實現爲以目標類型命名的運算符。像這樣,將POD實現爲自定義類類型鑄造

operator int{ return anInt; } 

另一種方式呢?例如,我可以重載自定義類類型轉換嗎?

回答

2

你可以,但你做到這一點不同,通過提供相關類的構造函數,它的基本類型作爲參數:

class X { 
public: 
    X(int) {} 
}; 

void f(X const &x) { } 

int main(){ 
    f(2); // allowed -- will construct an X, then pass it to `f`. 
} 

注意這可能會導致在某些情況下的意外轉換 - 通常認爲將這些構造函數標記爲explicit以防止它們被使用,除非明確強制轉換。

+0

所以,如果我這樣實現它?我可以簡單地做:MyCustomClass對象; object = 2;這會調用初始化器,然後複製構造函數? –

+0

@ShaneHsu:不需要'MyCustomClass object = 2;'會使用構造函數,但是作爲它自己的'object = 2;'語句是一個賦值,它將使用重載的賦值運算符。 –

+0

我明白了,這個怎麼樣? 'MyCustomClass object =(MyCustomClass)(2)'會調用什麼,或者只是編譯器錯誤? –

1

使用單參數的構造函數

MyClass(int n) :anInt(n) {}