C++ C++;带有重载[]运算符的MyInteger类,因此索引返回位置i中的数字
我的问题 定义一个名为MyInteger的类,该类存储整数,并具有获取和设置整数值的函数。然后,重载[]运算符,以便索引返回位置i中的数字,其中i=0是最低有效位。如果不存在这样的数字,则应返回-1 我理解第一部分,但我不理解如何实施第二部分 然后,重载[]运算符,以便索引返回位置i中的数字,其中i=0是最低有效位。如果不存在这样的数字,则应返回-1 我的代码是这样的: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
#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
notvoid
。MyInteger
可以有多少个数字?我假设有多少个整数并不重要。说明并不十分清楚,我的讲师甚至不能提供任何帮助…int
只能表示-2147483648到2147483647之间的值,因此仅支持rts 10位数。如果10位数不够,你可能想用另一种格式来存储值。@Christophe多亏了all,在所有输入之间,我会尝试把一些东西放在一起。我真的很想知道你是如何看待SOOTH算法的?它真的很有趣
return integer>=ten/10 ? digit:-1;