12

我的代码有一个ostream对象,由各个模块累积并最终显示到控制台。我还想将此ostream对象写入文件,但我是否必须改用ofstream对象重写所有代码,或者有没有办法将一个对象转换为另一个(也许通过一个stringstream?)

例如,我现有的许多功能看起来像

ostream& ClassObject::output(ostream& os) const
{
    os << "Details";
    return os;
}

我可以使用ofstream对象作为参数调用此函数并让该ofstream对象累积信息吗?

4

2 回答 2

17

是的你可以。这就是 OO 概念中称为subtype polymorphism的要点。由于ofstream派生自ostream,每个实例ofstream同时也是 的实例ostream(概念上)。因此,您可以在任何需要实例的地方使用它ostream

于 2013-03-18T20:57:16.810 回答
0

ofstream 派生自 ostream 所以

只需在main.cpp中添加一些代码

#include "ClassObject"
#include <fstream>
#include <iostream>

using namespace std;

int main()
{
     ClassObject ob;
     cout << ob; // print info to console window

     // save info to .txt file
     ofstream fileout;
     fileout.open("filename.txt", ios::app);
     fileout << ob;
     fileout.close();

     return 0;
}
于 2019-05-30T04:44:02.763 回答