2010-03-03 58 views
1

我試圖建立一個非常簡單的(現在)圍繞INT包裝類,並希望重載=操作符來實現類似以下內容:C++包裝=操作

class IntWrapper 
{ 
    ... 
    private: 
     int val; 
} 

int main () 
{ 
    IntWrapper a; 
    int b; 

    a = 5; // uses overloaded = to implement setter 
    b = a; // uses overloaded = to implement getter 
} 

但是我正在收集,這是無法完成的。實施二傳手是非常簡單的,是這樣的:

class IntWrapper 
{ 
    ... 
    IntWrapper& operator = (int rhs) { this.val = rhs; return *this; } 
    ... 
} 

然而,從Google檢索我的聚會有沒有辦法做到,吸氣用這種方式。我的理解是,這是因爲=運算符只能被覆蓋,以將變量分配給,並且因爲int是原始類型,所以我們無法覆蓋=的默認實現。它是否正確?如果不是,我該如何着手編寫getter?

如果這是正確的,有沒有人有類似的東西優雅的建議?關於我可以找到最近的超載轉換操作符:

class IntWrapper 
{ 
    ... 
    operator int() { return this.val; } 
    ... 
} 

int main () 
{ 
    ... 
    b = (int) a; 
    ... 
} 

對我來說,雖然這似乎是相當沒有意義的,因爲它幾乎不是一個簡單的GETVAL()方法更好。

感謝您的任何建議!

回答

4

您不需要轉換就可以調用轉換函數。 A plain

b = a; 

也會調用它。這樣,我可以看到這比使用getVal函數更方便。雖然我通常不使用轉換函數。我更喜歡明確的getVal函數。特別是考慮這一個

struct W { 
    W(int); 
    operator int(); 
}; 

int main() { 
    W w = 42; 
    int a = true ? 0 : w; // Ambiguity! What conversion direction? 
} 

它很快失控......

1

什麼你的建議是要走的路,我用它所有的時間。你不應該需要投一個int。編譯器非常聰明,可以看到b是一個int,它會自動爲你調用操作符int cast操作符。