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

时间:2017-03-10 00:07:03

标签: c++ class methods

我正在用一个名为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中的私有变量[]时,它输出零。那是为什么?

1 个答案:

答案 0 :(得分: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 []本身也没有意义。