ベストアンサー IncludeではなくClassで宣言するケース 2013/07/23 23:56 C++で、IncludeではなくClassで宣言すべきとき/Classで宣言した方が良いときとはどのようなときなのでしょうか? ※クラスの相互参照のケース以外について知りたいです。 みんなの回答 (6) 専門家の回答 質問者が選んだベストアンサー ベストアンサー qwertfk ベストアンサー率67% (55/81) 2013/07/24 01:28 回答No.5 インクルードせずに、プロトタイプを使う理由としては、 ・相互参照がある場合 ・includeによるコンパイルにかかる時間を減らす 程度でしょう。 よくあるパターンとしては #include <boost/ptr_container/ptr_vector.hpp> class ClassA {...}; class ClassB { boost::ptr_vector<ClassA>; }; のようなヘッダがあり、プリコンパイル済みヘッダが使えないような場合、boostのような コンパイルに時間がかかるヘッダを出来るだけインクルードしなくて良いようにするために 上記のインクルードではなく class ClassB; とプロトタイプ宣言で参照し、どうしても必要な箇所だけincludeする、という構造にすることがあります。 質問者 お礼 2013/07/24 09:20 ありがとうございます! 今までは「関数のin/outのパラメータまで情報が渡る分の、includeの方が良いのかな?」と思っていましたが、 大きなクラス、大量のincludeだとコンパイルに時間がかかるので、そういうケースでは、前方宣言にすることにします。 ありがとうございました! 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 その他の回答 (5) wormhole ベストアンサー率28% (1626/5665) 2013/07/24 01:42 回答No.6 >クラスの定義をするときに、 >そのクラスが必要とするヘッダファイルを#Includeで取り込む際、 >#Includeで取り込むのではなく、 >Class XXX として記載するケースがあると思います。 単にクラスXXXがあることがわかればいいだけのケースではないですか。 質問者 お礼 2013/07/24 09:13 ありがとうございます! 使いたいクラス、関数のプロトタイプ宣言までを取り込ませたい場合、#includeにし、 単にクラスxxxがあることがわかれば良いケースでは、前方宣言を使うことにします。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 kmee ベストアンサー率55% (1857/3366) 2013/07/24 01:12 回答No.4 とりあえず。 勝手に言葉作らないでください。 使うなら、その意味を説明してください。 ○#includeを使う場合 // ファイル: test0.h class testA { 定義... } ; // ファイル: test0.cpp #include "test.h" int main(){ testA objA ; } ○ 質問者が言うところの「Classで宣言」と思われるもの // ファイル: test1.cpp class testA { 定義... } ; int main(){ testA objA ; } でよろしいのですか?それとも別のなにかですか? もし、この2つなら、単一ソースファイルで使うときは、まったく等価です。 質問者 お礼 2013/07/24 09:24 意図を伝えられず申し訳ありません。 前方宣言のことをお聞きしようとしていました。 ありがとうございます。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 ryuzoji21 ベストアンサー率50% (6/12) 2013/07/24 00:50 回答No.3 あまり詳しくはないですが参考までに。 class ~~とクラス名を書くのは、恐らく前方宣言ではないでしょうか。 2つのクラスがお互いのクラスを参照し合っている時に、どちらかのクラスを、中身は書かずにclass クラス名;とだけ書いておいて、後で中身を書くという方法があります。 いずれにせよ、include文は他のヘッダファイルの内容を読み込むものなので、classと使い分けるとかそういうものではないと思います。 質問者 お礼 2013/07/24 09:27 ありがとうございます。 ご察しの通り前方宣言のことでありました。 (他の回答者さんのご回答のように、違いはあるようです) 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 Tacosan ベストアンサー率23% (3656/15482) 2013/07/24 00:28 回答No.2 union も仲間に入れてあげてください>#1. 質問者 お礼 2013/07/24 09:27 そういうのもあるのですね。 ありがとうございます。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 wormhole ベストアンサー率28% (1626/5665) 2013/07/24 00:09 回答No.1 質問の意図がわからないんですが・・・ クラスの定義ができるのはclassかstructだけで、 #includeでクラスの定義はできませんけど。 質問者 お礼 2013/07/24 09:30 意図を伝えられず、申し訳ありません。 クラスの定義をする際の話ではなく、クラスを使うときの話でありました。 ありがとうございます。 質問者 補足 2013/07/24 00:44 クラスの定義をするときに、 そのクラスが必要とするヘッダファイルを#Includeで取り込む際、 #Includeで取り込むのではなく、 Class XXX として記載するケースがあると思います。 どういうときに#Includeを使い、 どういうときにClassを使うのかを知りたいです。 . 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピュータープログラミング・開発C・C++・C# 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター プログラミング・開発 Microsoft ASPC・C++・C#CGIJavaJavaScriptPerlPHPVisual BasicHTMLXMLCSSFlashAJAXRubySwiftPythonパフォーマンス・チューニングオープンソース開発SEOスマートフォンアプリ開発その他(プログラミング・開発) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
お礼
ありがとうございます! 今までは「関数のin/outのパラメータまで情報が渡る分の、includeの方が良いのかな?」と思っていましたが、 大きなクラス、大量のincludeだとコンパイルに時間がかかるので、そういうケースでは、前方宣言にすることにします。 ありがとうございました!