C++ 当我重载数组操作符时,为什么我的私有变量等于零?

C++ 当我重载数组操作符时,为什么我的私有变量等于零?,c++,class,methods,C++,Class,Methods,我正在用一个名为MyInteger的类编写一个程序,该类存储一个整数,并具有获取和设置整数值的函数。然后我必须重载[]运算符,以便索引返回位置I中的数字,其中I=0是最低有效位 #include <iostream> #include <cmath> using namespace std; class MyInteger { public: MyInteger(); MyInteger(int n); int& operator[](

我正在用一个名为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];

}
#包括
#包括
使用名称空间std;
类MyInteger
{
公众:
MyInteger();
MyInteger(int-n);
int&运算符[](int索引);
无效集合号(int);
int getTotalGits();
int getNumber()常量;
私人:
整数;
整数位数;
int数字阵列[20];

friend ostream&operator成员函数
GetTotalGits
更改私有数据成员
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;
}

此外,重载的
运算符[]
本身也没有意义。

请您的问题提供答案。解决此类问题的正确工具是调试器。在询问堆栈溢出问题之前,您应该逐行检查代码。有关更多帮助,请阅读。至少,您应该[编辑]您的问题包括一个重现您的问题的示例,以及您在调试器中所做的观察。最好不要将
totalDigits
作为成员变量;以及运算符[]其他函数应该使用返回值
getTotalGits
谢谢。是的,我知道重载运算符没有意义。我能够修复它。再次感谢