2016-05-02 3 views
-1

私はC++とOOで少しずつ自己学習をしています。私はいくつかの古いUni Labsを使ってそれを行う方法を教えています.ImはOO構造のFile I/Oをどうやってやっているのでしょうか。私の最初の質問:CSVファイルからオブジェクトに、次に別のテキストファイルに情報を書き込むためのベストプラクティスは何ですか?それぞれのクラスにistreamostreamという演算子があり、最終的にはオブジェクトの情報を返したり変更したり、友人演算子を削除するアクセサやミューテータを作成します。それで、各クラスのライティング機能を維持していますか?あるいは、この目的のために別のライタークラスを作成しますか?C++でOOオリエンテーションのファイルI/O

+1

"OOオリエンテーション"についてはまったく忘れています。 iostreamライブラリの正規の使い方を学ぶだけです。 –

+0

ストリーミング操作では、クラスごとに入出力演算子を記述します。 'std :: istream&operator >>(std :: istream&s、Type&data)'と 'std :: ostream&operator <<(標準:: ostream&s、タイプconst&データ)' –

+0

しかし、あなたがしたいのは、 CSVファイルを読む:http://stackoverflow.com/q/415515/14065 –

答えて

0

クラス内で直列化ロジックを入れてoperator<<にそれを結合して、問題が過負荷にルールがsome_ostream << your_instance;

のすべての使用のために同じ関数を呼び出します。しかし、現実には、あなたがあなたのオブジェクトを作成する必要がありますということです複数のフォーマット。たとえば、データはCSV、XML、またはバイナリとして記述できます。どのような形式のときにすべての単一のクラスのoperator<<を変更する強制的に。

フォーマットを処理するクラスを作成する場合は、新しいフォーマットを簡単に追加できます。データ構造クラスは、一連の構成部分に分解する必要がありますが、形式固有のクラスでは、どのようにアトミック部分がコード化されるかを決定する必要があります。

OOPの基礎の1つである「単体責任原則」も、これについて言いたいことがあります。ストリームI/Oが特定のクラスの単一の目的でない場合、ストリームI/Oロジックはそのクラスにはまったく属しません。

+0

ああ、あなたはそれが効率的ではない上で行われた方法を信じていますか?オブジェクトデータをストリーミングするだけのクラスを作成する方法がありますか? –

+0

これは簡単に解決できます。特定の形式のシリアライザクラスを作成するだけです。 –

+0

@ Loki:そうですね、Zaydは、なぜ彼がクラスの友人である 'operator <<'から別のシリアライザクラスに切り替えるように言われたのかと尋ねていました。 –