我可以将 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
}

因为它说我需要使用 ofstreamout 的内容打印到文件中,我可以将 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;