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

用户2097612

我正在编写一个名为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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我的重载运算符返回零?

来自分类Dev

为什么当我使用重载的赋值运算符时却出现错误,却没有使用编译器提供的运算符?

来自分类Dev

有人可以指出为什么我的变量无法识别以及为什么我不能重载我的运算符

来自分类Dev

当我们可以通过&运算符传递变量的地址时,为什么要通过指针传递?

来自分类Dev

为什么我的重载乘法运算符无法识别?

来自分类Dev

为什么我不能重载::运算符?

来自分类Dev

当我使用is运算符时,为什么IL代码中只有空检查?

来自分类Dev

当我尝试对一个数字加一个矩阵求和时,为什么运算符重载失败?(但它的工作方式相反)

来自分类Dev

当我扩展CollectionType时,Swift不会调用我的“ ==”运算符重载

来自分类Dev

当我在二维数组参数中使用不带括号的引用运算符时,为什么会出现错误“声明为引用数组”?

来自分类Dev

为什么我的运算符+重载尽管通过引用传递但仍调用我的副本构造函数?

来自分类Dev

我已经重载<<和=运算符。为什么当我将一个对象分配给另一个对象并尝试打印该对象时,却打印出了垃圾邮件?

来自分类Dev

为什么仅当我从参数中删除splat运算符时,这种对Hash#each方法的使用才有效?

来自分类Dev

为什么我不能将此运算符重载放在与结构相同的名称空间中?

来自分类Dev

为什么我可以重载istream的运算符>>作为字符串?

来自分类Dev

为什么D中的char []数组没有引发Result类型的[]运算符重载?

来自分类Dev

当我在注释处理器中评估时,为什么伴随对象修饰符总是私有的?

来自分类Dev

我没有得到运算符重载

来自分类Dev

为什么需要运算符重载?

来自分类Dev

为什么我们在赋值运算符重载而不是在正负运算中使用引用返回?

来自分类Dev

为什么我们在赋值运算符重载而不是在正负运算中使用引用返回?

来自分类Dev

为什么我们不能使用带有数组名称的间接运算符?

来自分类Dev

为什么我的“ +”运算符被视为换行符?

来自分类Dev

为什么我的“ +”运算符被视为换行符?

来自分类Dev

当我们尝试将变量除以零时,为什么编译器没有显示错误

来自分类Dev

在不同类的运算符重载中访问/更改私有变量的问题

来自分类Dev

为什么Rust的运算符的类型为Output变量?

来自分类Dev

当我增加数组中引用的变量时,为什么我的PointF状况没有得到更新?

来自分类Dev

私有内部成员的运算符重载

Related 相关文章

  1. 1

    为什么我的重载运算符返回零?

  2. 2

    为什么当我使用重载的赋值运算符时却出现错误,却没有使用编译器提供的运算符?

  3. 3

    有人可以指出为什么我的变量无法识别以及为什么我不能重载我的运算符

  4. 4

    当我们可以通过&运算符传递变量的地址时,为什么要通过指针传递?

  5. 5

    为什么我的重载乘法运算符无法识别?

  6. 6

    为什么我不能重载::运算符?

  7. 7

    当我使用is运算符时,为什么IL代码中只有空检查?

  8. 8

    当我尝试对一个数字加一个矩阵求和时,为什么运算符重载失败?(但它的工作方式相反)

  9. 9

    当我扩展CollectionType时,Swift不会调用我的“ ==”运算符重载

  10. 10

    当我在二维数组参数中使用不带括号的引用运算符时,为什么会出现错误“声明为引用数组”?

  11. 11

    为什么我的运算符+重载尽管通过引用传递但仍调用我的副本构造函数?

  12. 12

    我已经重载<<和=运算符。为什么当我将一个对象分配给另一个对象并尝试打印该对象时,却打印出了垃圾邮件?

  13. 13

    为什么仅当我从参数中删除splat运算符时,这种对Hash#each方法的使用才有效?

  14. 14

    为什么我不能将此运算符重载放在与结构相同的名称空间中?

  15. 15

    为什么我可以重载istream的运算符>>作为字符串?

  16. 16

    为什么D中的char []数组没有引发Result类型的[]运算符重载?

  17. 17

    当我在注释处理器中评估时,为什么伴随对象修饰符总是私有的?

  18. 18

    我没有得到运算符重载

  19. 19

    为什么需要运算符重载?

  20. 20

    为什么我们在赋值运算符重载而不是在正负运算中使用引用返回?

  21. 21

    为什么我们在赋值运算符重载而不是在正负运算中使用引用返回?

  22. 22

    为什么我们不能使用带有数组名称的间接运算符?

  23. 23

    为什么我的“ +”运算符被视为换行符?

  24. 24

    为什么我的“ +”运算符被视为换行符?

  25. 25

    当我们尝试将变量除以零时,为什么编译器没有显示错误

  26. 26

    在不同类的运算符重载中访问/更改私有变量的问题

  27. 27

    为什么Rust的运算符的类型为Output变量?

  28. 28

    当我增加数组中引用的变量时,为什么我的PointF状况没有得到更新?

  29. 29

    私有内部成员的运算符重载

热门标签

归档