2013-12-21 25 views
0

我有一個名爲MyInteger的類,並且此類有一個int類型的數據成員 - 如何重載運算符「=」來返回此整數?我不允許使用訪問器方法來返回整數。重載運算符=而不是使用訪問器

數據成員

private: 
    int number; 

功能

int MyInteger::operator=(MyInteger myInteger) { 

    myInteger = this->number; 

    return myInteger; 
} 

我知道這是錯誤的,我曾試圖彌補類型轉換但是這也是錯誤的。

在另一大類我用這只是整數打印

cout << number << endl; 

如何解決這個問題?

+0

你打算如何使用這個操作符? –

+2

'operator ='應該按照慣例返回'* this;'。不這樣做會立即增加混淆。它看起來像是在更多的轉換操作符之後。 – chris

+0

@sftrabbit - 我編輯了我的問題 – user2991252

回答

-6

我認爲你不是指賦值運算符,而是談論一個轉換運算符。

例如:

#include <iostream> 
#include <algorithm> 
#include <iterator> 

class MyInteger 
{ 
public: 
    MyInteger() : number(0) {} 
    void operator()(int x) { if (x < 0) ++number; } 
    operator int() const { return number; } 

private: 
    int number; 
}; 

int main() 
{ 
    int a[] = { 1, 2, -3, 4, -5, 6, -7 }; 
    int count = std::for_each(std::begin(a), std::end(a), MyInteger()); 
    std::cout << "There are " << count << " negative values" << std::endl; 
} 
+5

但請注意,這幾乎肯定是一個壞主意。你會完全搞砸各種重載的函數調用。傾向於爲'std :: ostream&'和'MyInteger'定義'operator <<'。 –

+0

@軌道中的亮度比賽我不這麼認爲,因爲我已經理解這個類模擬整數。所以它也可以用於算術運算。此外,我直接回答了這個問題。毫無疑問什麼是更好的。 –

+1

它可能會模擬整數,但它不是一個。這是一個班級類型。隱式轉換 - 特別是內置類型 - 是_evil_!有時直接的答案是有害的。當然,在這種情況下,很難說出真正的用例是什麼,因爲這個特別的例子是如此人爲的做,除了用'int'包裝外什麼也不做。 –

5

你的你要如何使用這個不使用=運營商在所有的例子。 operator=超載會在這裏幫助你?

如果您希望能夠將MyInteger對象插入輸出流,則需要overload operator<<,其中左操作數是輸出流,右操作數是您的MyInteger對象。