当我超载数组运算符时,为什么我的私有变量等于零
Why does my private variable equal zero when I overload the array 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];
}
当我尝试访问过载函数定义[]
中的私有变量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 []
本身也没有意义。
相关文章:
- 为什么我的变量没有更新,我的 LED 没有亮起?
- 为什么我的变量存在于其范围之外
- 在我的变量打印C++后无法获得 $ 打印符号
- constexpr 函数在编译时获取值,即使我的变量不是 constexpr
- 为什么我的变量在我尚未将其设置为任何值时返回一个值?
- 乘以十进制的倍数,给我一个小十进制答案,以回馈我的变量
- 我的变量将值相互混合????C++
- C++:我的简单计算器程序无法打印出来。我也认为我的变量命名不正确
- 此CMAKE错误意味着什么?我的变量设置为未发现
- 为什么 std::cout 会更改我的变量?
- 为什么我的变量在单独的线程中修改时没有改变?C++/boost
- 为什么我的变量被强制初始化为 0,即使它不应该初始化?
- 第一个C 库:我不确定在哪里参考并声明我的变量
- C++ 我是否应该完全限定我的变量类型
- 为什么当我通过引用传递数组时,我会收到一个编译器错误,指出我的变量未定义
- 为什么我的变量从1到2,然后又回到1
- 为什么重命名我的变量会阻止segfault
- 为什么我的变量被重写了
- 我的变量不会有任何值
- 如何通过C++和C#中的键盘立即按下(不按enter)将用户的数据存储在我的变量中