当我超载数组运算符时,为什么我的私有变量等于零



我正在编写一个名为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时,它会输出零。为什么?

成员函数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 []本身也没有意义。

最新更新