2017-03-10 27 views
-1

我正在寫一個名爲MyInteger的類的程序,它存儲一個整數並具有獲取和設置整數值的函數。然後,我必須重載[]運算符,以便索引返回位置i的數字,其中i = 0是最不重要的數字。當我重載數組運算符時,爲什麼我的私有變量等於零?

#include <iostream> 
#include <cmath> 
using namespace std; 

class MyInteger 
{ 
public: 

    MyInteger(); 
    MyInteger(int n); 
    int& operator[](int index); 
    void setNumber(int); 
    int getTotalDigits(); 
    int getNumber() const; 


private: 
    int number; 
    int totalDigits; 
    int digitArray[20]; 
    friend ostream& operator <<(ostream&, MyInteger&); 
}; 

int main() 
{ 
    MyInteger b(4); 

    cout << b.getNumber() << endl; 

    return 0; 
} 

MyInteger::MyInteger() : number(0) 
{ 

} 

MyInteger::MyInteger(int n) :number(n) 
{ 

} 

int MyInteger::getNumber() const 
{ 
    return number; 
} 

void MyInteger::setNumber(int n) 
{ 
    number = n; 
} 

int MyInteger::getTotalDigits() 
{ 
    totalDigits = 0; 
    int count = 0; 

    while (number > 0) 
    { 
     number = number/10; 
     totalDigits++; 
    } 

    return totalDigits; 
} 


ostream& operator <<(ostream& outputStream, MyInteger& I) 
{ 
    outputStream << I.getNumber(); 

    return outputStream; 
} 

int& MyInteger:: operator [](int index) 
{ 
    getTotalDigits(); 
    cout << number << endl; // This comes out to be zero 
    digitArray[totalDigits - 1] = number*pow(10, totalDigits - 1); 
    for (int i = totalDigits - 1; i > 0; i--) 
    { 
     digitArray[i - i] = digitArray[i] * pow(10, totalDigits - 1); 
    } 

    return digitArray[index]; 

} 

當我嘗試訪問私有變量number在重載函數定義[],其輸出爲零。這是爲什麼?

+2

請編輯您的問題以提供[mcve]。 –

+1

解決此類問題的正確工具是您的調試器。在*堆棧溢出問題之前,您應該逐行執行您的代碼。如需更多幫助,請閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您應該\編輯您的問題,以包含一個[最小,完整和可驗證](http://stackoverflow.com/help/mcve)示例,該示例再現了您的問題,以及您在調試器。 –

+0

將'totalDigits'作爲一個成員變量是更好的設計;而運算符[]和其他函數應該使用'getTotalDigits'的返回值。 –

回答

1

成員函數getTotalDigits改變私有數據成員number

int MyInteger::getTotalDigits() 
{ 
    totalDigits = 0; 
    int count = 0; 

    while (number > 0) 
      ^^^^^^^^^^ 
    { 
     number = number/10; 
     totalDigits++; 
    } 

    return totalDigits; 
} 

正確的實現可以

int MyInteger::getTotalDigits() const 
{ 
    totalDigits = 0; 

    int value = number; 

    do { totalDigits++; } while (value /= 10); 

    return totalDigits; 
} 

而且超載operator []本身就沒有意義了。

+0

謝謝。是的,我知道重載的操作員沒有意義。我能夠修復它。再次感謝你 – user2097612

相關問題