
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も見ています
-
【初月無料キャンペーン実施中】オンライン健康相談gooドクター
24時間365日いつでも医師に健康相談できる!詳しくはコチラ>>
-
1 つ以上の複数回定義されているシンボルが見つかりました
C言語・C++・C#
-
c++,ある関数のクラスから別のクラスの関数を呼ぶ
C言語・C++・C#
-
newしないオブジェクトについて
C言語・C++・C#
-
4
C言語 配列の長さの上限
C言語・C++・C#
-
5
【gcc・cygwin】multiple definitionエラーの解決法
C言語・C++・C#
-
6
C++にてtemplateで受け取った任意の型の変数が何型であるかを判定したい
C言語・C++・C#
-
7
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
8
クラスのアドレスを引数として渡したい
C言語・C++・C#
-
9
cout と cerrの違い
C言語・C++・C#
-
10
C#にて別クラスの関数を使いたい
C言語・C++・C#
-
11
float型とdouble型の変数の違いを教えてほしいです
C言語・C++・C#
-
12
Debug Assertion Failed?
C言語・C++・C#
-
13
複数のクラスで共通した関数を使いたい場合
C言語・C++・C#
-
14
C++ クラスをメンバにもつクラスについて
C言語・C++・C#
-
15
CSVの定義
その他(パソコン・スマホ・電化製品)
-
16
外部依存関係について
C言語・C++・C#
-
17
戻り値で構造体を返すことは可能でしょうか?
C言語・C++・C#
-
18
テキストファイルの行数を取得する方法(C言語
C言語・C++・C#
-
19
既定のコンストラクタがありません。というエラーについて
C言語・C++・C#
-
20
参照型で受け取った引数をポインター型に渡す方法
C言語・C++・C#
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
"secret" "classified" "confid...
-
5
共通で使う関数を集めたクラス...
-
6
私はクラスLINEにまだ入れてな...
-
7
どこからも呼ばれていない無意...
-
8
VBAもしくはVB6:クラスの中で...
-
9
グローバルIPとプライベートIP...
-
10
同じクラスにならない確率を教...
-
11
Excelでクラス分け表を作成した...
-
12
複数のクラスで共通した関数を...
-
13
自作のクラスファイルがインポ...
-
14
同じパッケージ、クラス名が含...
-
15
dllと同じプロジェクトにする方法
-
16
eclipseのパッケージって何?
-
17
重複エラーを解決するには
-
18
クラスのメンバ関数が多すぎる...
-
19
「エンクロージング型」と「外...
-
20
エクセルのデータ振り分け方法...
おすすめ情報
公式facebook
公式twitter