C++の勉強をしている最中です。
クラスの宣言を.hファイル、メンバー関数の定義を.cppファイルに分けて書くべきだと教わりました。
教えていただきたいのは以下の二つです。
1.どうして分けて書くべきなのか?
2.自分が今後使うであろうクラスは.cppファイルと.hファイルをひとつのフォルダに入れて保管してあります。
(この保管の仕方がそもそも我流なのでいけないんですけど)
Visual Stdioを使っているのですが、空のプロジェクトを作ると「ソースファイル」「ヘッダーファイル」「リソースファイル」と
3つのフィルターがあらかじめ作られていると思います。本来ならば各フィルター名の通りにファイルを入れていくべきなんでしょう。
ただこの分類の仕方だと、ただの.cppファイルのすぐ隣りにクラスの.cppファイルが置かれたり、そもそも中身を見る必要のないはずの
クラスのファイルが「無駄に」中身を見れてしまったりしますよね。
わかりにくい文章になってしまいましたが、つまるところ
「プロジェクトで使うファイルの整理の仕方」を知りたいのです。
実際のフォルダ内のファイルの置き場所と、フィルター内のファイルの置き場所の違い、
同じクラスの.hファイルと.cppファイルはどこに配置すればいいかなどを教えていただけると嬉しいです。
できれば複数の方の回答をいただきたいと思っています
よろしくお願いします
クラスを書いたファイルの置き場について
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: クラスを書いたファイルの置き場について
1.分けるべきか分けないべきかで言うと特に現代では絶対的な理由はないと思いますが、大人数だとそうも言ってられないですね。
ただ、テンプレートを使うとヘッダに書くのを避けられませんけどね。
分けて書くメリットは、
・コンパイルが速くなる(大規模な場合)。
・インターフェイスと実装が区別しやすい(ソースコード見るときに分りやすい)。
・LIB/DLL化するためには分けることは必須。
・見せなくて良いものをヘッダから排除できるので、使う側が余分なことしない(多数で開発する時)
って所でしょうか。
2.分け方。
ヘッダとソースは同じフォルダで良いと思います。
多くなりすぎるとヘッダとソースを機能別に分けたほうが良いとは思いますが。
ただ、テンプレートを使うとヘッダに書くのを避けられませんけどね。
分けて書くメリットは、
・コンパイルが速くなる(大規模な場合)。
・インターフェイスと実装が区別しやすい(ソースコード見るときに分りやすい)。
・LIB/DLL化するためには分けることは必須。
・見せなくて良いものをヘッダから排除できるので、使う側が余分なことしない(多数で開発する時)
って所でしょうか。
2.分け方。
ヘッダとソースは同じフォルダで良いと思います。
多くなりすぎるとヘッダとソースを機能別に分けたほうが良いとは思いますが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: クラスを書いたファイルの置き場について
どうして分けたほうが良いかはsoftyaさんが書かれていてそのとおりなのでわたしは特に述べることがありません。
わたしはたいていsrcという名前のフォルダに.hファイル.cppファイルその他もろもろ一緒くたに入れてます。
ソースファイルが多いときは機能別にサブフォルダを作って分けますがやはり関連する.hファイル.cppファイルその他もろもろ一緒にします。
わたしは仕事でクロス開発するときライブラリも全部ソースファイルでプロジェクトに登録しないといけないので、ライブラリのソースファイルを分けて入れるフィルタをたくさん作ります。
Visual C++のデフォルトのフィルタ以外使っていけないことはないですから、見たくないソースをいれておくフィルタを作るとか。
あとご存知かもしれませんが、ソリューションエクスプローラのプロジェクト名にフォーカスを合わせておいてメニューの『プロジェクト』→『既存項目の追加...』を選択、ファイル選択ダイアログで.hファイル.cppファイルいろいろごちゃまぜで複数選択すると自動的に各フィルタに振り分けられます。
.hファイル.cppファイルを異なるフォルダに入れると同時に選択できないわけなのでフィルタ本来の機能の意義が失われてしまう気がします。
わたしはたいていsrcという名前のフォルダに.hファイル.cppファイルその他もろもろ一緒くたに入れてます。
ソースファイルが多いときは機能別にサブフォルダを作って分けますがやはり関連する.hファイル.cppファイルその他もろもろ一緒にします。
わたしは仕事でクロス開発するときライブラリも全部ソースファイルでプロジェクトに登録しないといけないので、ライブラリのソースファイルを分けて入れるフィルタをたくさん作ります。
Visual C++のデフォルトのフィルタ以外使っていけないことはないですから、見たくないソースをいれておくフィルタを作るとか。
あとご存知かもしれませんが、ソリューションエクスプローラのプロジェクト名にフォーカスを合わせておいてメニューの『プロジェクト』→『既存項目の追加...』を選択、ファイル選択ダイアログで.hファイル.cppファイルいろいろごちゃまぜで複数選択すると自動的に各フィルタに振り分けられます。
.hファイル.cppファイルを異なるフォルダに入れると同時に選択できないわけなのでフィルタ本来の機能の意義が失われてしまう気がします。
-
シロクマチャッピー
Re: クラスを書いたファイルの置き場について
回答ありがとうございます
クラスを書いたファイルを
普段管理するときはクラス名のフォルダに.cppファイルと.hファイルをまとめて入れておき
プロジェクトに入れるときは基本的にはどのクラスのファイルもごっちゃにしてプロジェクトのフォルダに突っ込んでおくことにします。
クラスを書いたファイルを
普段管理するときはクラス名のフォルダに.cppファイルと.hファイルをまとめて入れておき
プロジェクトに入れるときは基本的にはどのクラスのファイルもごっちゃにしてプロジェクトのフォルダに突っ込んでおくことにします。