C++ C++;带有重载[]运算符的MyInteger类,因此索引返回位置i中的数字

C++ C++;带有重载[]运算符的MyInteger类,因此索引返回位置i中的数字,c++,operator-overloading,overloading,C++,Operator Overloading,Overloading,我的问题 定义一个名为MyInteger的类,该类存储整数,并具有获取和设置整数值的函数。然后,重载[]运算符,以便索引返回位置i中的数字,其中i=0是最低有效位。如果不存在这样的数字,则应返回-1 我理解第一部分,但我不理解如何实施第二部分 然后,重载[]运算符,以便索引返回位置i中的数字,其中i=0是最低有效位。如果不存在这样的数字,则应返回-1 我的代码是这样的: #include <iostream> using namespace std; class MyInteger

我的问题

定义一个名为MyInteger的类,该类存储整数,并具有获取和设置整数值的函数。然后,重载[]运算符,以便索引返回位置i中的数字,其中i=0是最低有效位。如果不存在这样的数字,则应返回-1

我理解第一部分,但我不理解如何实施第二部分

然后,重载[]运算符,以便索引返回位置i中的数字,其中i=0是最低有效位。如果不存在这样的数字,则应返回-1

我的代码是这样的:

#include <iostream>
using namespace std;

class MyInteger{
private:
  int integer;
public:
  MyInteger(int bInteger = 0)
  {
     integer = bInteger;
  }
  int getInteger(){ return integer; }
  void setInteger(int bInteger){ integer = bInteger; }

  void operator[](int x) //???
  {
  }

};

int main()
{

  cout << "Enter an integer " << endl;
  //cin >> 

}
#包括
使用名称空间std;
类MyInteger{
私人:
整数;
公众:
MyInteger(int-bInteger=0)
{
整数=二进制整数;
}
int getInteger(){return integer;}
void setInteger(int-bInteger){integer=bInteger;}
无效运算符[](int x)/???
{
}
};
int main()
{
库特
}

据我所知,在第二部分中,您必须实现运算符才能返回一个位数。 在某种程度上

MyInteger x;
x.set(43210)
int a = x[0];
int b = x[1];
int c = x[5];
a应该等于0,b应该等于1,c应该等于-1。要获取数字,可以使用模运算:

要获取任何整数“i”的第一个数字(索引0),只需返回i%10。获取第二个数字(索引1)

第二个索引

int result = ((i - (i%10) - (i%100)) % 1000) / 1000

这可以用一个for循环更轻松地表述

对于十进制数,您的类应返回与位置(索引)对应的十进制数字,例如,如果MyInteger m=12347,运算符m[0]将返回7,m[3]将返回2,m[6]将返回-1。

对于问题的第一部分,我建议您:

int operator[](int x) 
{
    int ten; 
    for (ten = 10; x; x--)
        ten *= 10; 
    int digit = (integer%ten) / (ten / 10);
    return digit; 
}
顺便说一下,为了简化测试,我建议您定义以下内容,以允许在
MyInteger
上使用cin:

istream& operator>> (istream& is, MyInteger& x) 
{
    int v; 
    is >> v;
    x.setInteger(v); 
    return is;
} 
对于第二部分,如果不存在这样的数字,则应返回-1.,说明可能存在的“越界”。例如,如果你有x=21,你有x[3],你会返回0与上面的程序,而实际上没有第四位数字

因此,您可以按如下方式更改
运算符[]
的最后一条指令:

    return integer>=ten/10 ?  digit:-1; 
我可以和你分享我的代码。 但我不确定解决你的问题是否最好

#包括
#包括
使用名称空间std;
类MyInteger
{
公众:
MyInteger(int-integer);
MyInteger();
int运算符[](int索引);
无效集(整数);
int get();
私人:
整数;
};
int main()
{
我的整数;
整数集(123456);

该运算符必须返回
int
not
void
MyInteger
可以有多少个数字?我假设有多少个整数并不重要。说明并不十分清楚,我的讲师甚至不能提供任何帮助…
int
只能表示-2147483648到2147483647之间的值,因此仅支持rts 10位数。如果10位数不够,你可能想用另一种格式来存储值。@Christophe多亏了all,在所有输入之间,我会尝试把一些东西放在一起。我真的很想知道你是如何看待SOOTH算法的?它真的很有趣
    return integer>=ten/10 ?  digit:-1;