我刚开始学习 C++,我在 C++ 入门中看到了一些这样的函数:
double total_receipt(ostream &os)const{...}
Run Code Online (Sandbox Code Playgroud)
然后我尝试cout
使用以下代码查找地址:"cout << &cout << endl;"
这ostream &os
和直接使用没有区别cout
。
那么为什么不直接使用cout
代替ostream &os
呢?或者这只是一个“好”的习惯?
第一个通知:
当你声明一个方法时,你需要使用类名作为参数,所以如果你的类使用“输出流”(这就是什么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
示例中所示。这意味着,除了打印到终端之外,您的函数还可以打印到文件,因此您可以根据需要添加更多功能。