我正在编写一个名为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 []
本身也没有意义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句