質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

4回答

1504閲覧

ファイルを管理するクラスの内容をどうすべきかわからない

inkmg

総合スコア11

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/08/06 04:46

前提・実現したいこと

c++でゲームを作っています。
テキストファイルのデータを読み込んで変数に格納する必要がでてきたので、新しくファイルに関する仕事をするクラスを用意しようと思ったのですが、どこまで仕事を任せれば良いかわかりません。

例えば、データを格納したい変数を参照渡ししてそのクラスの中でファイルオープン、データの読み込み、格納を行うか、ファイル名を渡して、そのクラスの中でファイルオープンだけし、ifsteam型の変数を戻り値として受け取り、呼び出し元のクラスでデータの読み込み格納をするかと言った感じです。

普通はどのようにするのでしょうか。

また、今後データの保存も行う予定なのですが、この機能はファイルを読み込むクラスに追加すれば良いのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

  • データを管理するクラス(仮にgame_dataクラスとする)
  • データを管理するクラスをファイルから作るフリー関数(std::basic_istream&を受け取ってgame_dataを返す)
  • データを管理するクラスからファイルを作るフリー関数(std::basic_ostream&const game_data&を受け取る)

を作ればいいんではないかと

投稿2018/08/06 04:55

yumetodo

総合スコア5850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

inkmg

2018/08/06 10:43

回答ありがとうございます。フリー関数を使うということは考えていませんでした。
guest

0

ベストアンサー

こんにちは。

ある程度決まった処理があるなら、そのカスタムなファイル管理クラスにその「決まった」処理を任せてしまえば、そのファイル管理クラスを使う人は「決まった処理」に煩わされずに使えるので楽ですし、バグも減らせます。

しかし、その決まった処理がほとんどないなら、fstreamをそのまま使えばよいです。後者の例は正にこちらに該当します。
fstreamのコンストラクタへパラメータをパススルーするだけの関数を別途作る意味はほぼありません。auto ofs = std::ofstream("foo.txt");は多くの人が意味を把握できます。auto ofs = create_file("foo.txt");と書かれていた場合、create_file()関数の定義を見に行く必要があります。そこに、return std::ofstream(param);なんて書かれていたらがっかりです。怒りさえ覚える人も居ると思います。

投稿2018/08/06 08:27

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yumetodo

2018/08/06 08:31

怒りさえ覚えるw まあわかる。
inkmg

2018/08/06 10:35 編集

回答ありがとうございます。決まった処理はないので、今回はfstreamを使おうと思います。また今後無駄な関数を作らないよう気を付けたいと思います。
guest

0

どこまで仕事を任せれば良いかわかりません。

設計次第。要件次第です。
任せるのは作る人の仕事です。
まず全ての仕事を洗い出し、バランスや再利用性などを考えて
自身で与えて行くと良いです。
「これが答え」というのが存在しないので、実際の要件と照らし合わせ、
調整していくしかないです。
どんなに熟練者であってもいきなり100%のものはできません。
1つ1つ調整していくものです。

投稿2018/08/06 05:38

m.ts10806

総合スコア80854

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

inkmg

2018/08/06 10:37

回答ありがとうございます。柔軟に思考しなければならないのですね。プログラミング初心者なので、これからそのような力をつけられるよう頑張ります。
guest

0

c++でゲームを作っています。

シリアライズをどこまでこだわるかによると思いますが。
個人的にはjson11を押しておきます。

投稿2018/08/06 11:03

umyu

総合スコア5846

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問