重载输入操作符无法进行自动简单输入测试

时间:2012-11-19 03:43:41

标签: c++ operator-overloading

所以我没有对一个任务问题进行简单的输入测试。我要解析由空格分隔的两个整数。这两个整数用在我定义为类的Rationalnumber类型的私有成员num和denom中。我在使用此代码时是否存在非常规的非常规内容?此代码适用于我的所有测试。

std::istream &operator>>( std::istream &is, Rationalnumber &r ) {   
    Rationalnumber::in++;   // increment counter

    // get the num
    string n;
    getline(cin,n,' ');
    stringstream ssnum(n);
    ssnum >> r.num;

    // get the denom
    string d;
    getline(cin,d,'\n');
    stringstream ssdenom(d);
    ssdenom >> r.denom;

    return is;
}

1 个答案:

答案 0 :(得分:1)

您的代码至少在两个显而易见的方面失败了:

  1. 如果使用的是与空格不同的空格,例如'\t',则代码无法识别它。
  2. 输入操作员在给出无效输入时不会指示失败,例如,当输入为"a b"而不是数字时。
  3. 传统上,当输入失败时,valuevread保持不变。对于您的实现,情况也是如此。为了解决问题,代码实际上可以简化并在此过程中变得更加笨拙。由于这显然是家庭作业,我认为提供代码并不合适。