为啥当我重载数组运算符时我的私有变量为零? [关闭]
Posted
技术标签:
【中文标题】为啥当我重载数组运算符时我的私有变量为零? [关闭]【英文标题】:Why does my private variable equal zero when I overload the array operator? [closed]为什么当我重载数组运算符时我的私有变量为零? [关闭] 【发布时间】:2017-03-10 00:07:02 【问题描述】:我正在编写一个带有名为 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
时,它输出为零。这是为什么呢?
【问题讨论】:
请edit您的问题提供minimal reproducible example。 调试器是解决此类问题的正确工具。 在询问 Stack Overflow 之前,您应该逐行逐行检查您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 [编辑] 您的问题以包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。 最好不要将totalDigits
作为成员变量;而operator[]等函数应该使用getTotalDigits
的返回值
【参考方案1】:
成员函数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 []
本身也没有意义。
【讨论】:
谢谢。是的,我知道重载运算符没有意义。我能够修复它。再次感谢您以上是关于为啥当我重载数组运算符时我的私有变量为零? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章