我可以将 ostream 转换为 ofstream 吗?
Can I cast an ostream as an ofstream?
我有这个代码
ostream & operator<<(ostream & out, call_class & Org)
{
for (int i = 0; i<Org.count; i++)
{
out << Org.call_DB[i].firstname << " " << Org.call_DB[i].lastname
<< " " << Org.call_DB[i].relays << " " << Org.call_DB[i].cell_number
<< " " << Org.call_DB[i].call_length << endl;
}
//Put code to OPEN and CLOSE an ofstream and print to the file "stats7_output.txt".
return out; //must have this statement
}
因为它说我需要使用 ofstream
将 out
的内容打印到文件中,我可以将 out
转换为 ofstream
并使用那个?
例如,这行得通吗?
new_stream = (ofstream) out;
这是主函数中调用该函数的代码
cout << MyClass << endl;
MyClass 的类型是 call_class
假设我不能只将参数 out
更改为 ofstream
类型
编辑:谢谢大家的帮助。我知道由于缺乏明确的指导,这是一个很难回答的问题。我的教授基本上给了我们同一个问题的两个不同版本,但不清楚他在问什么。我只是将数据写入函数外部的文件,希望这足够好。
您误解了该运算符的工作原理。由于该函数采用 ostream &
,它将与从 ostream
派生的任何 class 一起工作,例如 ofstream
。这意味着我们需要做的就是在 ofstream
实例上调用此函数,输出将定向到该实例引用的文件。那看起来像
std::ofstream fout("some text file.txt");
call_class Org;
// populate Org
fout << Org;
现在我们将输出到文件流。输出函数不关心它输出到哪里,您可以从调用站点控制它。这也为您提供了同一个运算符处理所有输出流的优势。我们可以将 fout
替换为 cout
、一些 stringstream
或从 ostream
.
派生的任何其他流
std::ostream
的用法如所写,是正确且惯用的。要写入文件,只需创建一个 std::ofstream
类型的对象并将其用作流对象:
call_class org = /* whatever */
std::ofstream str("myfile.txt");
str << org;
这是可行的,因为 std::ofstream
派生自 std::ostream
,因此您可以在需要引用 std::ostream
的任何地方传递 std::ofstream
。这是多态性的基础。
此外,如果仍然存在混淆,同一个插入器可用于 任何 类型的 std::ostream
对象:
call_class org = /* whatever */
std::cout << org;
我有这个代码
ostream & operator<<(ostream & out, call_class & Org)
{
for (int i = 0; i<Org.count; i++)
{
out << Org.call_DB[i].firstname << " " << Org.call_DB[i].lastname
<< " " << Org.call_DB[i].relays << " " << Org.call_DB[i].cell_number
<< " " << Org.call_DB[i].call_length << endl;
}
//Put code to OPEN and CLOSE an ofstream and print to the file "stats7_output.txt".
return out; //must have this statement
}
因为它说我需要使用 ofstream
将 out
的内容打印到文件中,我可以将 out
转换为 ofstream
并使用那个?
例如,这行得通吗?
new_stream = (ofstream) out;
这是主函数中调用该函数的代码
cout << MyClass << endl;
MyClass 的类型是 call_class
假设我不能只将参数 out
更改为 ofstream
编辑:谢谢大家的帮助。我知道由于缺乏明确的指导,这是一个很难回答的问题。我的教授基本上给了我们同一个问题的两个不同版本,但不清楚他在问什么。我只是将数据写入函数外部的文件,希望这足够好。
您误解了该运算符的工作原理。由于该函数采用 ostream &
,它将与从 ostream
派生的任何 class 一起工作,例如 ofstream
。这意味着我们需要做的就是在 ofstream
实例上调用此函数,输出将定向到该实例引用的文件。那看起来像
std::ofstream fout("some text file.txt");
call_class Org;
// populate Org
fout << Org;
现在我们将输出到文件流。输出函数不关心它输出到哪里,您可以从调用站点控制它。这也为您提供了同一个运算符处理所有输出流的优势。我们可以将 fout
替换为 cout
、一些 stringstream
或从 ostream
.
std::ostream
的用法如所写,是正确且惯用的。要写入文件,只需创建一个 std::ofstream
类型的对象并将其用作流对象:
call_class org = /* whatever */
std::ofstream str("myfile.txt");
str << org;
这是可行的,因为 std::ofstream
派生自 std::ostream
,因此您可以在需要引用 std::ostream
的任何地方传递 std::ofstream
。这是多态性的基础。
此外,如果仍然存在混淆,同一个插入器可用于 任何 类型的 std::ostream
对象:
call_class org = /* whatever */
std::cout << org;