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

用户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

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

来自分类Dev

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

来自分类Dev

为什么我们必须重载 += 和 -= 除了重载 + 和 - 运算符?

来自分类Dev

当我将其初始化为-1时,为什么数组会被填充为零

来自分类Dev

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

来自分类Java

为什么我们有==运算符时使用equals()方法?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

当使用调用运算符的退出代码为非零时,为什么PowerShell脚本没有结束?

来自分类Dev

在将varEmpty与值为零的varInteger比较时,为什么“ =”运算符的结果为True?

来自分类Dev

当我们使用数组名称而不是传播运算符时有什么区别?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

为什么我在 TS 中使用 & 运算符时没有得到我所有的属性?

来自分类Dev

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

来自分类Dev

为什么要将运算符“ new”设为私有?

来自分类Dev

为什么SceneKit中没有运算符重载?

来自分类Dev

为什么 C++ 有时不能识别重载运算符?

来自分类Dev

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

来自分类Dev

我没有得到运算符重载

来自分类Dev

为 numpy 数组重载“==”运算符

来自分类Dev

为什么称为运算符重载?

来自分类Dev

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

Related 相关文章

  1. 1

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

  2. 2

    当我们进行运算符重载时,这两段代码有什么区别?

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

    为什么我的右值的重载下标运算符没有被调用

  7. 7

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

  8. 8

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

  9. 9

    为什么我们必须重载 += 和 -= 除了重载 + 和 - 运算符?

  10. 10

    当我将其初始化为-1时,为什么数组会被填充为零

  11. 11

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

  12. 12

    为什么我们有==运算符时使用equals()方法?

  13. 13

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

  14. 14

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

  15. 15

    当使用调用运算符的退出代码为非零时,为什么PowerShell脚本没有结束?

  16. 16

    在将varEmpty与值为零的varInteger比较时,为什么“ =”运算符的结果为True?

  17. 17

    当我们使用数组名称而不是传播运算符时有什么区别?

  18. 18

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

  19. 19

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

  20. 20

    为什么我在 TS 中使用 & 运算符时没有得到我所有的属性?

  21. 21

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

  22. 22

    为什么要将运算符“ new”设为私有?

  23. 23

    为什么SceneKit中没有运算符重载?

  24. 24

    为什么 C++ 有时不能识别重载运算符?

  25. 25

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

  26. 26

    我没有得到运算符重载

  27. 27

    为 numpy 数组重载“==”运算符

  28. 28

    为什么称为运算符重载?

  29. 29

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

热门标签

归档