-2

ファイルから読み書きするさまざまなデータのコンテナーであるクラスがいくつかあります。通常、ファイルには 1 行 (カンマ区切りのフィールド) ごとに 1 つのエンティティがありますが、エンティティが複数の行にまたがっている場合があります。

ファイルの読み取りと書き込みのコードを再利用する正しい方法を考え出そうとしています。fstream、すべてのチェック、および文字列の書式設定を処理する各クラスに個別の Read() 関数と Write() 関数を使用することもできますが、一部のコードを再利用するためのより良い方法があるはずだと感じています。

編集:

私は自分の問題について十分に具体的ではなかったことに気づきました。いくつかの回答/コメントが示唆した方法で実装するのを妨げたのは、複数行のエンティティがあることです。そのため、ファイルから読み取った行をクラスに渡して解析することはできません。いくつかの行を渡す必要がある場合があります。

エンティティが複数行の場合、通常は行の先頭に id フィールドがあるため、id が繰り返されると、複数の行を読み取る必要があります。

たとえば、1 つのファイルがポリゴンである場合、1 行に 2 つの座標があり、この場合は単純です。しかし、別のファイルがポリゴンのセットである場合、ポリゴン ID と各行に 2 つの座標が含まれます。そのように:

id, x, y
0, 1, 2
0, 5, 0
0, -1, -1
1, 4, 4
1, 0, 8
1, -4, 4
1, 0, 0

編集2:

最初の編集で自分の問題を説明しているときに、複数行のエンティティをどうするかを理解しました。読み取り行を 1 行ずつ各クラスに渡して、未完成のエンティティを設定することもできます。これは、他の人に説明しようとするとすぐに問題が明らかになるため、今では当たり前のように思えます。コメントしてくれてありがとう!

4

3 に答える 3

1

Stroustrup の本の 1 つを読んだことを覚えています。彼は、別々の機能を別々のクラスに分離するという方針に沿った何かを勧めました。次に、多重継承を使用して 2 つを 1 つのクラスに結合できます。したがって、現在の問題を解決する 1 つの大きなクラスを構築するだけでなく、将来の問題を解決するために再利用しやすい個別の部分を構築します。基本的に、将来再利用できるように常にクラスを構築しようとします。

于 2012-12-10T21:53:46.813 に答える
1

さまざまなコンテナーのデータが十分に類似している場合、ファイル IO 用の単一のクラスを作成できるはずです。書き込み/入力するオブジェクトのタイプを渡します。

各クラスに、2 つのメソッドを定義するインターフェースを実装させます。1 つは現在の行または文字列の配列 (行が分割された後) を取り、すべてのオブジェクト値を設定し、もう 1 つはすべてのデータをカンマ区切りの文字列として文字列を返します (これは書き込み用です)。複数行の状況は扱いが難しく、特別なケースとして扱う価値があるかもしれません。

ファイル IO クラスは、開いたり閉じたり、読み書きしたり、コンマで行を分割したり、渡されたオブジェクトのメソッドを呼び出したりする必要があります。ファイル IO クラスには、インターフェイス タイプのポインターを渡す必要があります。

于 2012-12-10T21:27:22.843 に答える
0

operator<<ostreamをオーバーロードできます

于 2012-12-10T21:33:24.670 に答える