
C++ でコンソールアプリケーションを作っています。
プログラムの規模が大きくなり,クラスの数も増えてきました。
これまでヘッダファイルとクラスを一対一対応させてきました。
クラスの増加に伴い,ヘッダファイルがかなり増えてしまいました。
疑問に思ったのですが 1 つのヘッダファイルに記述するクラスの個数に,決まりはあるのでしょうか?
ためしに 1 つのヘッダファイルに 2 つのクラスを書くと,問題なく動作しました。
ちなみに,その 2 つのクラスの関係は,お互いに完全に独立し合っている関係です。
(継承や friend の利用など一切なし,ということです。)
1 つのヘッダファイルに複数のクラスを書くことは OK なのでしょうか?
またこうすることで生じる問題があれば,お聞かせいただければ幸いです。
(プログラミング超初心者につきマヌケな質問をしているかもしれません)
No.2ベストアンサー
- 回答日時:
言語に規制がないのは確かです。
Javaとかみたいに、publicがひとつとか、ファイル名とクラス名が一致してないとだめとかいうこともありません。
C++のファイルを分けるというのは、意味合い的には、
Javaとかでいうpackageわけ(ディレクトリ分け)にも近いものがあるので、
(実際には、論理構成とファイル構成が対応付けられてるJavaのpackageとは違い、
C++では翻訳単位の話と名前空間の話は別ですけど、前者的な観点でみて)
1クラス=1ヘッダというよりは、1パッケージ=1ヘッダの方が好ましいという考え方もあります。
# MFCなんかはボテッとしたクラスが基本なので、
# デフォルトで1クラス=1ヘッダを作ろうとしますけど…。
本当に、何の関係もないものをまとめるのは管理上もお勧めしませんが、
(実際の依存関係とは直接関係なく)意味的に関連のあるもの
(同一パッケージに属するようなもの)はまとめてもありだと思います。
ほぼすべてが「1パッケージに1クラスづつしかない」ということは、
まともに設計されてればそうそうないと思いますので、
この程度の指針でもファイル数の削減は可能かと思います。
No.1
- 回答日時:
がると申します。
んっと…「言語仕様的な規則」は「ない」です。
ただ、可視性やら保守メンテナンスの観点からは…微妙になります。
曰く「ファイル数が多いと管理しきれない」
vs
曰く「1ファイルに複数クラスが書いてあると可視性が悪い」
どっちもどっちですねぇ。
個人的には
・原則として1ファイル1クラス
・ただし「極めて密接なもの」の場合複数クラスを1ファイルに書くこともあり
・ファイル名の前方一致で「近しいクラス」をまとめる
というルーリングでやってますが。
まぁ「現場の流儀に従う」のが一番かもしれません。
回答くださり,ありがとうございます。
> ・原則として1ファイル1クラス
> ・ただし「極めて密接なもの」の場合複数クラスを1ファイルに書くこともあり
> ・ファイル名の前方一致で「近しいクラス」をまとめる
書物などを開いても,ヘッダファイルの「流儀」の記述は少なく,ここで質問してみてよかったです。
ファイル名なども考慮に入れれば,よりいっそう,管理しやすくなるというのは,参考になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
中学のクラス数
-
標準モジュールとクラスモジュ...
-
僕の出身中学校は200人同級生が...
-
UMLのクラス図はmain()も含むん...
-
IPアドレスのクラスAを取得して...
-
VB.netのコンテナークラスとは...
-
eclipse でクラスに色
-
河合塾
-
共通で使う関数を集めたクラス...
-
SDカードについて
-
string formatについて
-
配列の重複する値とその個数を...
-
重複エラーを解決するには
-
main()を持つクラスが2つ以上...
-
tomcat サーブレットエラー
-
どこからも呼ばれていない無意...
-
Cstring(日本語含む)をcharに...
-
Sub-LVDS規格とは
-
Eclipseで例えば↓のようなInter...
-
ClassViewからクラスが消えまし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ヒグマを撃退
-
中学のクラス数
-
そんなにお金がなくても年に1度...
-
UMLのクラス図はmain()も含むん...
-
どこからも呼ばれていない無意...
-
java eclipse 型に解決できません
-
配列の重複する値とその個数を...
-
EclipseでJSPのコンパイルエラー
-
僕の出身中学校は200人同級生が...
-
コンボボックスのマウスホイー...
-
main()を持つクラスが2つ以上...
-
Cstring(日本語含む)をcharに...
-
同一パッケージにあるクラスが...
-
IPアドレスのクラスAを取得して...
-
dllと同じプロジェクトにする方法
-
標準モジュールとクラスモジュ...
-
VBAもしくはVB6:クラスの中で...
-
Sub-LVDS規格とは
-
同じクラスにならない確率を教...
-
複数のクラスで共通した関数を...
おすすめ情報