“ostream &os”有什么用?

Ez2*_*z2M 4 c++

我刚开始学习 C++,我在 C++ 入门中看到了一些这样的函数:

double total_receipt(ostream &os)const{...}
Run Code Online (Sandbox Code Playgroud)

然后我尝试cout使用以下代码查找地址:"cout << &cout << endl;"

ostream &os和直接使用没有区别cout

那么为什么不直接使用cout代替ostream &os呢?或者这只是一个“好”的习惯?

Dan*_*iel 5

第一个通知:

当你声明一个方法时,你需要使用类名作为参数,所以如果你的类使用“输出流”(这就是什么ostream意思),那么你声明你的函数,如:

double total_receipt(ostream &os)
Run Code Online (Sandbox Code Playgroud)

你不能像这样创建函数:

double total_receipt(cout) // doesn't work
Run Code Online (Sandbox Code Playgroud)

现在,如果您的问题是关于total_receipt像这样声明函数有什么区别:

double total_receipt(ostream &os) {
    os << "hello world" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

或者像这样:

double total_receipt() {
    std::cout << "hello world" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

随你(由你决定。通常,我们使用第一个,因为它允许使用除 之外的其他内容调用该函数cout,例如:

ofstream out_file("my_file.txt");
total_receipt(out_file);
Run Code Online (Sandbox Code Playgroud)

因此,您可以向该函数传递从 派生的类的任何对象ostream,如ofstream示例中所示。这意味着,除了打印到终端之外,您的函数还可以打印到文件,因此您可以根据需要添加更多功能。