-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
在重載函數定義[]
,其輸出爲零。這是爲什麼?
請編輯您的問題以提供[mcve]。 –
解決此類問題的正確工具是您的調試器。在*堆棧溢出問題之前,您應該逐行執行您的代碼。如需更多幫助,請閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您應該\編輯您的問題,以包含一個[最小,完整和可驗證](http://stackoverflow.com/help/mcve)示例,該示例再現了您的問題,以及您在調試器。 –
將'totalDigits'作爲一個成員變量是更好的設計;而運算符[]和其他函數應該使用'getTotalDigits'的返回值。 –