覆盖>>运算符,如 int
Override >> operator like int
这是家庭作业的一部分。我不想要一个答案,只是帮助。我必须创建一个名为MyInt的类,它可以存储任何大小的正整数。我只能使用cstring cctype iomanip和iostream库。我真的不知道从哪里开始。
6) 创建提取运算符>>的重载,用于从输入流中读取整数。此运算符应忽略数字前的任何前导空格,然后读取连续数字,直到遇到非数字为止(这与>>对普通int的工作方式相同,所以我们希望使我们的工作方式也相同)。此运算符应仅提取并存储对象中的数字。数字后遇到的"第一个非数字"可能是下一个输入的一部分,因此不应提取。您可以假设输入中的第一个非空白字符将是一个数字。也就是说,当你要求输入一个数字时,你不必错误地检查是否输入了不合适的类型(比如字母)。
示例:假设执行了以下代码,并且输入的是"123457894H"。
MyInt x,y;char ch;cin>>x>>y>>ch;x的值现在应该是12345,y的值应该是7894,ch的值应该为"H"。
我的代码的最后一个状态如下:
istream& operator>>(istream& s, MyInt& N){
N.Resize(5);
N.currentSize=1;
char c;
int i = 0;
s >> c;
N.DigitArray[i++] = C2I(c);
N.currentSize++;
c = s.peek();
while(C2I(c) != -1){
s >> c;
if(N.currentSize >= N.maxSize)
N.Resize(N.maxSize + 5);
N.DigitArray[i] = C2I(c);
i++;
N.currentSize++;
}
}
它几乎奏效了!现在它抓住了正确的数字,但当我点击回车键时它并没有结束,我必须输入一个字母才能结束。
您可以通过以下方式为类创建operator>>
重载(作为一个免费函数,而不是在类内):
std::istream& operator>>(std::istream& lhs, MyInt& rhs) {
// read from lhs into rhs
// then return lhs to allow chaining
return lhs;
}
您可以使用istream
的成员peek
和read
读取字符,使用isspace
测试字符是否为空格,使用isdigit
检查字符是否为数字(isspace
和isdigit
位于<cctype>
标头中)。
首先,您的operator>>
应该只关注从流中提取字符序列,并根据您的规则知道何时停止。然后,它应该服从myInt
的构造函数来实际摄取该字符串。毕竟,该类可能希望公开以下构造函数:
myInt bigone ("123456123451234123121");
用于更通用的用途,对吧?而且,职能部门应该有单一的责任。
所以你的一般形式是:
istream& operator>> (istream& is, myInt x)
{
string s = extract_digits_from_stream(is);
x = myInt(s);
return is; // chaining
}
现在,如何从流中提取数字并在非数字处停止?我想到了peek
函数,unget
也是。我会查看正则整数的提取运算符的源代码,看看它的作用。
- 为什么在全局范围内使用"extern int a"似乎不行?
- int(c) 和 c-'0' 之间的区别。C++
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 是否可以从int转换为enum类类型
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 'short int'持有的值溢出,但"自动"不会溢出?
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 调用'begin(int [n])'没有匹配函数
- 没有显式声明的int[]中的foreach
- 在c++中访问int到类对象的映射时出错
- 为什么我无法更改"set<set>"循环中的值<int>
- EASTL矢量<向量<int>>连续的
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- 'structstd::对<int,int>'没有名为'push_back'