C++ 当我重载数组操作符时,为什么我的私有变量等于零?
我正在用一个名为MyInteger的类编写一个程序,该类存储一个整数,并具有获取和设置整数值的函数。然后我必须重载[]运算符,以便索引返回位置I中的数字,其中I=0是最低有效位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[](
#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
谢谢。是的,我知道重载运算符没有意义。我能够修复它。再次感谢