- ベストアンサー
1 つのヘッダファイルに複数のクラスって?
C++ でコンソールアプリケーションを作っています。 プログラムの規模が大きくなり,クラスの数も増えてきました。 これまでヘッダファイルとクラスを一対一対応させてきました。 クラスの増加に伴い,ヘッダファイルがかなり増えてしまいました。 疑問に思ったのですが 1 つのヘッダファイルに記述するクラスの個数に,決まりはあるのでしょうか? ためしに 1 つのヘッダファイルに 2 つのクラスを書くと,問題なく動作しました。 ちなみに,その 2 つのクラスの関係は,お互いに完全に独立し合っている関係です。 (継承や friend の利用など一切なし,ということです。) 1 つのヘッダファイルに複数のクラスを書くことは OK なのでしょうか? またこうすることで生じる問題があれば,お聞かせいただければ幸いです。 (プログラミング超初心者につきマヌケな質問をしているかもしれません)
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
言語に規制がないのは確かです。 Javaとかみたいに、publicがひとつとか、ファイル名とクラス名が一致してないとだめとかいうこともありません。 C++のファイルを分けるというのは、意味合い的には、 Javaとかでいうpackageわけ(ディレクトリ分け)にも近いものがあるので、 (実際には、論理構成とファイル構成が対応付けられてるJavaのpackageとは違い、 C++では翻訳単位の話と名前空間の話は別ですけど、前者的な観点でみて) 1クラス=1ヘッダというよりは、1パッケージ=1ヘッダの方が好ましいという考え方もあります。 # MFCなんかはボテッとしたクラスが基本なので、 # デフォルトで1クラス=1ヘッダを作ろうとしますけど…。 本当に、何の関係もないものをまとめるのは管理上もお勧めしませんが、 (実際の依存関係とは直接関係なく)意味的に関連のあるもの (同一パッケージに属するようなもの)はまとめてもありだと思います。 ほぼすべてが「1パッケージに1クラスづつしかない」ということは、 まともに設計されてればそうそうないと思いますので、 この程度の指針でもファイル数の削減は可能かと思います。
その他の回答 (1)
- galluda
- ベストアンサー率35% (440/1242)
がると申します。 んっと…「言語仕様的な規則」は「ない」です。 ただ、可視性やら保守メンテナンスの観点からは…微妙になります。 曰く「ファイル数が多いと管理しきれない」 vs 曰く「1ファイルに複数クラスが書いてあると可視性が悪い」 どっちもどっちですねぇ。 個人的には ・原則として1ファイル1クラス ・ただし「極めて密接なもの」の場合複数クラスを1ファイルに書くこともあり ・ファイル名の前方一致で「近しいクラス」をまとめる というルーリングでやってますが。 まぁ「現場の流儀に従う」のが一番かもしれません。
お礼
回答くださり,ありがとうございます。 > ・原則として1ファイル1クラス > ・ただし「極めて密接なもの」の場合複数クラスを1ファイルに書くこともあり > ・ファイル名の前方一致で「近しいクラス」をまとめる 書物などを開いても,ヘッダファイルの「流儀」の記述は少なく,ここで質問してみてよかったです。 ファイル名なども考慮に入れれば,よりいっそう,管理しやすくなるというのは,参考になりました。
お礼
回答くださり,ありがとうございます。