12

私のコードには、ostreamさまざまなモジュールによって蓄積され、最終的にコンソールに表示されるオブジェクトがあります。ALSO にこのオブジェクトをファイルに書き込んでもらいたいのですが、代わりにオブジェクトostreamを使用してそのコードをすべて書き直すofstream必要がありますか、または一方を他方に変換する方法がありますか (おそらくstringstream?)

たとえば、私の既存の関数の多くは次のようになります

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

ofstreamオブジェクトを引数としてこの関数を呼び出し、ofstream代わりにそのオブジェクトに情報を蓄積させることはできますか?

4

2 に答える 2

17

はい、できます。これが、サブタイプ ポリモーフィズムと呼ばれるオブジェクト指向の概念のポイントです。はからofstream派生しているためostream、 のすべてのインスタンスはofstream同時にostream(概念的に) のインスタンスでもあります。ostreamそのため、 のインスタンスが期待される場所ならどこでも使用できます。

于 2013-03-18T20:57:16.810 に答える
0

ostream so から派生した ofstream

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 に答える