2013-12-13 82 views
2

使用好友有可能嗎?是否可以使用朋友函數將類型轉換爲基本類型?

class MyClass 
{ 
private: 
    int myInteger; 
    float myFloat; 

public: 
    void SetData(int a, float b) 
    { 
     myInteger = a; 
     myFloat = b; 
    } 
    operator int(); 
    friend operator float(MyClass &); 
}; 

MyClass :: operator int() 
{ 
    return myInteger; 
} 

operator float(MyClass & obj) 
{ 
    return obj.myFloat; 
} 

此代碼不能編譯。如何以正確的方式做到這一點?

+0

你試過了嗎?如果是這樣,結果如何? –

+0

有趣的是,http://en.cppreference.com/w/cpp/language/operators的彙總表沒有列出這種情況。我知道有幾個人更喜歡cppreference.com來cplusplus.com,但我很驚訝地發現它在這裏不足。 –

+2

我認爲一個轉換函數需要是一個成員函數,請參見[class.conv.fct]和http://stackoverflow.com/q/2999506/420683 – dyp

回答

2

VS2008說:

error C2801: 'operator float' must be a non-static member 

爲什麼不使運算浮一員?

operator float(){ return myFloat;} 
+0

我知道它可以與成員完成。 – anonymous

1

如果超載運營商是不是爲你工作,可以考慮使用一個命名函數:

float ToFloat(MyClass & obj) 
{ 
    return obj.myFloat; 
} 

這也將避免隱式轉換...但我想,如果你是在超載的計劃操作符您的意圖是允許隱式轉換。

相關問題