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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# VisualStudioでC++クラスを追加するとき、ファイルを所定のフォルダ下につくりたい 3 2023/08/24 17:17
- C言語・C++・C# メインプログラムに#include <algorithm>を書いて、 そのメインプログラムが // 3 2023/05/02 11:24
- 予備校・塾・家庭教師 駿台。高三のクラス選択について。 駿台模試の数学偏差値が60あるので一応物理の難関クラス認定は貰って 1 2023/04/03 17:00
- いじめ・人間関係 いじめって当事者同士の争いで学校とかってはっきりいって被害者でないの? 3 2022/04/07 19:06
- 友達・仲間 現在高校1年で来月から高校2年になります。 私はコミュ障があり幼稚園の時から人と話すことが苦手で友達 1 2023/03/03 19:21
- 友達・仲間 過去問について 1 2023/04/25 19:17
- Excel(エクセル) Excelで全クラスのランキング表を作成したい 4 2022/05/24 15:28
- 友達・仲間 毎回自分がここに行きたい!と心の底から思っていたら行けなくなってしまいます。 例えばライブに行きたく 3 2022/05/01 21:23
- 計算機科学 判定問題がPに属するなら探索問題はNPに属する。では判定問題がNPに属するとき探索問題は? 2 2023/05/20 19:10
- 新卒・第二新卒 自己PRの作り方を教えてください。 私には人間関係構築力があると伝えたいです。 クラスでいえば、中心 3 2022/09/21 14:13
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
【C++】関数ポインタの使い方
C言語・C++・C#
-
C++にてtemplateで受け取った任意の型の変数が何型であるかを判定したい
C言語・C++・C#
-
ひとつのファイルにクラスは1つ?
Java
-
-
4
newしないオブジェクトについて
C言語・C++・C#
-
5
変数名の付け方
Java
-
6
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
7
c++,ある関数のクラスから別のクラスの関数を呼ぶ
C言語・C++・C#
-
8
charからLPTSTRへの変換方法
C言語・C++・C#
-
9
char*を初期化したいのですが
C言語・C++・C#
-
10
ヒープメモリの解放について
C言語・C++・C#
-
11
構造体のメンバをfor文で回したい
C言語・C++・C#
-
12
1 つ以上の複数回定義されているシンボルが見つかりました
C言語・C++・C#
-
13
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
14
プログラムの中で別のmainを呼び出す
C言語・C++・C#
-
15
戻り値で構造体を返すことは可能でしょうか?
C言語・C++・C#
-
16
Win32APIでのエディットボックスの文字化け
C言語・C++・C#
-
17
既定のコンストラクタがありません。というエラーについて
C言語・C++・C#
-
18
プログラムでの数字につく”f”の意味
C言語・C++・C#
-
19
std::stringからLPCWSTR型への変換
C言語・C++・C#
-
20
#defineの定数を文字列として読み込む
C言語・C++・C#
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
dllと同じプロジェクトにする方法
-
1 つのヘッダファイルに複数の...
-
UMLのクラス図はmain()も含むん...
-
同じクラスにならない確率を教...
-
グローバルIPとプライベートIP...
-
3年間同じクラスになる確率
-
EclipseでJSPのコンパイルエラー
-
java eclipse 型に解決できません
-
「天声人語」をインターネット...
-
自作のクラスファイルがインポ...
-
同一パッケージにあるクラスが...
-
配列の重複する値とその個数を...
-
main()を持つクラスが2つ以上...
-
Lsit<LabelValueBean>について
-
A・B・Cクラスとは?
-
IPアドレスの3バイト目の呼び方
-
string formatについて
-
サーブレット実行時のエラー
-
エクセルのデータ振り分け方法...
-
大規模開発の最適なパッケージ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グローバルIPとプライベートIP...
-
配列の重複する値とその個数を...
-
java eclipse 型に解決できません
-
「天声人語」をインターネット...
-
オブジェクト指向プログラミン...
-
同一パッケージにあるクラスが...
-
SQLです教えてくださいお願いし...
-
自作のクラスファイルがインポ...
-
packageとimport の違いって?
-
重複エラーを解決するには
-
1 つのヘッダファイルに複数の...
-
UMLのクラス図はmain()も含むん...
-
main()を持つクラスが2つ以上...
-
3年間同じクラスになる確率
-
河合塾のクラス分けについて
-
EclipseでJSPのコンパイルエラー
-
どこからも呼ばれていない無意...
-
IPアドレスの3バイト目の呼び方
-
同じクラスにならない確率を教...
-
IPアドレスのクラスAを取得して...
おすすめ情報