• ベストアンサー

IncludeではなくClassで宣言するケース

C++で、IncludeではなくClassで宣言すべきとき/Classで宣言した方が良いときとはどのようなときなのでしょうか? ※クラスの相互参照のケース以外について知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • qwertfk
  • ベストアンサー率67% (55/81)
回答No.5

インクルードせずに、プロトタイプを使う理由としては、 ・相互参照がある場合 ・includeによるコンパイルにかかる時間を減らす 程度でしょう。 よくあるパターンとしては #include <boost/ptr_container/ptr_vector.hpp> class ClassA {...}; class ClassB { boost::ptr_vector<ClassA>; }; のようなヘッダがあり、プリコンパイル済みヘッダが使えないような場合、boostのような コンパイルに時間がかかるヘッダを出来るだけインクルードしなくて良いようにするために 上記のインクルードではなく class ClassB; とプロトタイプ宣言で参照し、どうしても必要な箇所だけincludeする、という構造にすることがあります。

TeferiMage
質問者

お礼

ありがとうございます! 今までは「関数のin/outのパラメータまで情報が渡る分の、includeの方が良いのかな?」と思っていましたが、 大きなクラス、大量のincludeだとコンパイルに時間がかかるので、そういうケースでは、前方宣言にすることにします。 ありがとうございました!

その他の回答 (5)

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.6

>クラスの定義をするときに、 >そのクラスが必要とするヘッダファイルを#Includeで取り込む際、 >#Includeで取り込むのではなく、 >Class XXX として記載するケースがあると思います。 単にクラスXXXがあることがわかればいいだけのケースではないですか。

TeferiMage
質問者

お礼

ありがとうございます! 使いたいクラス、関数のプロトタイプ宣言までを取り込ませたい場合、#includeにし、 単にクラスxxxがあることがわかれば良いケースでは、前方宣言を使うことにします。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答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つなら、単一ソースファイルで使うときは、まったく等価です。

TeferiMage
質問者

お礼

意図を伝えられず申し訳ありません。 前方宣言のことをお聞きしようとしていました。 ありがとうございます。

  • ryuzoji21
  • ベストアンサー率50% (6/12)
回答No.3

あまり詳しくはないですが参考までに。 class ~~とクラス名を書くのは、恐らく前方宣言ではないでしょうか。 2つのクラスがお互いのクラスを参照し合っている時に、どちらかのクラスを、中身は書かずにclass クラス名;とだけ書いておいて、後で中身を書くという方法があります。 いずれにせよ、include文は他のヘッダファイルの内容を読み込むものなので、classと使い分けるとかそういうものではないと思います。

TeferiMage
質問者

お礼

ありがとうございます。 ご察しの通り前方宣言のことでありました。 (他の回答者さんのご回答のように、違いはあるようです)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

union も仲間に入れてあげてください>#1.

TeferiMage
質問者

お礼

そういうのもあるのですね。 ありがとうございます。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

質問の意図がわからないんですが・・・ クラスの定義ができるのはclassかstructだけで、 #includeでクラスの定義はできませんけど。

TeferiMage
質問者

お礼

意図を伝えられず、申し訳ありません。 クラスの定義をする際の話ではなく、クラスを使うときの話でありました。 ありがとうございます。

TeferiMage
質問者

補足

クラスの定義をするときに、 そのクラスが必要とするヘッダファイルを#Includeで取り込む際、 #Includeで取り込むのではなく、 Class XXX として記載するケースがあると思います。 どういうときに#Includeを使い、 どういうときにClassを使うのかを知りたいです。 .

関連するQ&A