我正在开展一个学校项目来实现多项式的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;
}
谢谢!
答案 0 :(得分:3)
你仍然应该重载operator >>
。在您的运算符实现中,您可以根据需要提取尽可能多的“单词”(我假设每个系数大约一个)。不要试图超载getline
,这就是要获得一行不是Polynomial
。