【问题标题】:Create a print function that takes an ostream as an argument and writes to that stream创建一个以 ostream 作为参数并写入该流的打印函数
【发布时间】:2011-11-02 23:55:29
【问题描述】:

我目前正在回答有关 C++ 中运算符重载的练习题。我有一个问题:

创建一个包含 int 的简单类,并将 operator+ 重载为成员函数。还提供一个 print() 成员函数,它以 ostream& 作为参数并打印到该 ostream&。测试你的类以证明它可以正常工作。

我可以创建类并编写 operator+ 函数,但我真的不明白问题的第二部分。到目前为止,在我对 c++ 的研究中,我还没有真正遇到过 ostream,因此不确定是否可以显式创建这样的流。我试过使用:

std::ostream o;

但是,这会产生错误。有人可以请教我应该如何创建这个函数吗?

【问题讨论】:

  • cout 是一个ostream。你确定你没有遇到过吗?
  • 我确实意识到 cout 是 ostream,但是这与 iv 使用它一样多,但是,iv 从未被要求传递一个作为参数,这就是为什么我不确定如何执行此操作。

标签: c++ operator-overloading ostream


【解决方案1】:

到目前为止,在我对 c++ 的研究中,我还没有真正遇到过 ostream 和 as 这样不确定是否可以显式创建这样的流。一世 尝试过使用:std::ostream o;

您一定错过了什么,因为 ostream 很重要。顺便说一下,std::cout 是 std::ostream 类型的变量。用法或多或少是这样的

#include <iostream> //defines "std::ostream", and creates "std::ofstream std::cout"
#include <fstream> //defines "std::ofstream" (a type of std::ostream)
std::ostream& doStuffWithStream(std::ostream &out) { //defines a function
    out << "apples!";
    return out;
}
int main() {
    std::cout << "starting!\n"; 
    doStuffWithStream(std::cout); //uses the function

    std::ofstream fileout("C:/myfile.txt"); //creates a "std::ofstream"
    doStuffWithStream(fileout); //uses the function

    return 0;
}

【讨论】:

  • 我确实知道 cout 是 ostream 类型,但是因为 iv 从来没有将 ostream 作为函数参数传递,所以我不确定该怎么做。我想在函数中引用 ostream 作为参数,我必须首先创建一个 ostream 对象,看来情况并非如此。感谢您帮助解决这个问题。
  • 函数定义不需要任何对象实际存在,它只需要知道类型。显然,您必须在某个时候创建​​一个流以传递给该函数。在这里,我传递了 std::cout(包含 时自动创建)和我自己创建的 fileout。
【解决方案2】:

您没有创建 ostream,而是创建了 ostream 引用,就像您的练习问题所说的那样。你在你的打印函数的参数列表中执行它,即

void print(std::ostream & os);

然后您可以调用该函数,传递 cout 或派生自 ostream(ofstream、ostringstream 等...) 的类的任何其他对象

【讨论】:

  • 感谢您的帮助。通常在传递参数时,您需要传递一个对象,这就是为什么我对这个问题感到困惑,我认为我必须创建一个 ostream 类型的对象。
猜你喜欢
  • 2015-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多