重载>>运算符
overloading the >> operator
我遇到了麻烦,事实上我卡住了。我必须为有理数定义一个类.现在其中一部分是重载输入和输出运算符,现在我已经为输出运算符完成了它,但我坚持输入。这是我被卡住的程度
istream& operator >>(istream& ins, rational& frac)
{
int numerator, denominator;
ins >> numerator;
if()
return ins;
}
我的问题是我如何使它们分开分子和分母。 如果有帮助,我的类头如下。
#ifndef RAT_H
#define RAT_H
#include <iostream>
#include <cstring>
using namespace std;
class rational
{
public:
rational();
rational(int n,int d);
rational(int whole_number);
friend ostream& operator <<(ostream& outs, const rational& frac);
friend istream& operator >>(istream& ins, rational& frac);
private:
void split(string fract);
int numerator;
int denominator;
string farray[2];
string fraction;
};
#endif // RAT_H
输出操作器执行以下操作:
ostream& operator <<(ostream& outs, const rational& frac)
{
outs << frac.numerator<<'/'<<frac.denominator;
return outs;
}
你真正需要做的就是
- 读取分子
- 如果成功,请查看下一个角色是否是
'/'
,如果是,则ignore()
它。 - 阅读分母。
- 设置值。
所以,真正需要的是
int numerator, denominator;
if (in >> numerator
&& (in >> std::ws).peek() == '/'
&& in.ignore() >> denominator) {
...
}
唯一棘手的业务是使用std::ws
如果有的话,它会跳过空格。您的格式实际上并不需要它。
你还没有真正深入到足够的细节,你是什么愿意接受作为输入,但通常的处理解决方案分离器是定义一个拾取它们的操纵器,并且设置failbit
如果它们不存在。 像这样:
class CheckedSeparator
{
char m_separ;
public:
CheckedSeparator( char separ ) : m_separ( separ ) {}
friend std::istream& operator>>( std::istream& source,
CheckedSeparator const& dest )
{
char separSeen;
source >> separSeen;
if ( separSeen != dest.m_separ ) {
source.setstate( std::ios_base::failbit );
}
return source;
}
};
如果这样做,则无需if
:
std::istream&
operator>>( std::istream& source, Rational& frac )
{
int n;
int d;
source >> n >> CheckedSeparator('/') >> d;
if ( source ) {
frac = Rational( n, d );
}
return source;
}
相关文章:
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 增量运算符与后缀混淆
- 一个关于在C++中重载布尔运算符的问题
- 运算符C++ "delete []"仅删除 2 个前值
- 模板类无法识别友元运算符
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 关闭||运算符优化
- 通过继承类使用来自不同命名空间的运算符
- C++Cast运算符过载
- 如何使用AngelScript注册SFML Vector2运算符
- 重载元组索引运算符-C++
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 布尔比较运算符是如何在C++中工作的
- 重载运算符new[]的行为取决于析构函数
- 是否需要使用 - &gt;运算符在C 中调用成员函数时