创建一个打印函数,该函数将ostream作为参数并写入该流

时间:2011-08-24 16:44:49

标签: c++ operator-overloading ostream

我目前正在讨论有关C ++中运算符重载的问题。我有一个问题:

创建一个包含int的简单类,并将operator +作为成员函数重载。还提供了一个print()成员函数,它具有一个ostream和amp;作为一个论点并打印到那个ostream&amp ;.测试你的课程,以证明它是否正常工作。

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

std :: ostream o;

然而,这会产生错误。有人可以请教我如何创建这个功能吗?

2 个答案:

答案 0 :(得分:9)

  

到目前为止,在我对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;
}

答案 1 :(得分:4)

你没有创建一个ostream,你创建一个ostream引用,就像你的运动问题所说的那样。你可以在打印功能的参数列表中进行,即

void print(std::ostream & os);

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