在c ++类中重载全局函数getline

时间:2011-10-22 00:42:38

标签: c++ operator-overloading getline

我正在开展一个学校项目来实现多项式的c ++类。我的课程应该做的事情是从标准输入或文件中读取多项式。我想过重载>>直到我在favorite c++ reference site上阅读以下内容:

  

请注意,istream提取操作使用空格   分隔符,因此此操作只会提取可能的内容   从流中考虑了一个词。要提取整行文本,   引用全局函数getline的字符串重载。

这让我所有的灵感,重载全局函数函数getline我多项式类,以便它可以从文件中读取整行。有很多的教程和文章描述了如何重载流提取运算符,但我找不到任何关于函数getline任何细节。我应该超载它,但我想要吗?从参考文献来看,这似乎是如何完成的。

在我看过的一些重载的getline函数中(比如链接到页面的底部),我注意到它们返回类似“basic_istream”的东西。我回到istream是否足够?那么“char_type”怎么样? char会满足吗?

基本上我想知道:这有什么东西会超载,还是有一些我应该担心的挑剔细节?

这是我做过的标题:

class Polynomial {

  public:
    friend istream& getline(istream& is, Polynomial & poly);
    friend istream& getline(istream& is, Polynomial & poly, char delim);

};

friend istream& getline(istream& is, Polynomial & poly) {

    return getline(is, poly, '\n');
}

friend istream& getline(istream& is, Polynomial & poly, char delim) {
    // read enough tokens to make a term
    // stop when we get to the delimiter

    return is;
}

谢谢!

1 个答案:

答案 0 :(得分:3)

你仍然应该重载operator >>。在您的运算符实现中,您可以根据需要提取尽可能多的“单词”(我假设每个系数大约一个)。不要试图超载getline,这就是要获得一行不是Polynomial