【问题标题】:Overloading global function getline in a c++ class在 C++ 类中重载全局函数 getline
【发布时间】:2011-10-22 00:42:37
【问题描述】:

我正在开展一个学校项目,以实现多项式的 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;
}

谢谢!

【问题讨论】:

  • 你为什么要故意写一个目的与它的名字不匹配的函数?

标签: c++ operator-overloading getline


【解决方案1】:

你仍然应该超载operator >>。在您的运算符实现中,您可以根据需要提取任意数量的“单词”(我假设每个系数一个左右)。不要试图超载getline,那就是得到一条线而不是Polynomial

【讨论】:

  • 嗯,但文本文件中的多项式可能有 n 项。告诉您已经结束的唯一方法是使用分隔符。你确定 getline 不合适吗?谢谢!
  • 你可以在你的函数inside中使用getline,这并不意味着你需要将它命名为getline。
  • 啊,所以你建议我重载 getline,但在一个名为 getPolynomial 的函数中调用它?我喜欢那种声音。
猜你喜欢
  • 2017-07-31
  • 1970-01-01
  • 1970-01-01
  • 2016-05-21
  • 1970-01-01
  • 2021-12-17
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多