アプリ版:「スタンプのみでお礼する」機能のリリースについて

C++で、IncludeではなくClassで宣言すべきとき/Classで宣言した方が良いときとはどのようなときなのでしょうか?

※クラスの相互参照のケース以外について知りたいです。

A 回答 (6件)

インクルードせずに、プロトタイプを使う理由としては、



・相互参照がある場合
・includeによるコンパイルにかかる時間を減らす

程度でしょう。

よくあるパターンとしては


#include <boost/ptr_container/ptr_vector.hpp>

class ClassA {...};

class ClassB
{
boost::ptr_vector<ClassA>;
};


のようなヘッダがあり、プリコンパイル済みヘッダが使えないような場合、boostのような
コンパイルに時間がかかるヘッダを出来るだけインクルードしなくて良いようにするために
上記のインクルードではなく

class ClassB;

とプロトタイプ宣言で参照し、どうしても必要な箇所だけincludeする、という構造にすることがあります。
    • good
    • 0
この回答へのお礼

ありがとうございます!

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

ありがとうございました!

お礼日時:2013/07/24 09:20

>クラスの定義をするときに、


>そのクラスが必要とするヘッダファイルを#Includeで取り込む際、
>#Includeで取り込むのではなく、
>Class XXX として記載するケースがあると思います。

単にクラスXXXがあることがわかればいいだけのケースではないですか。
    • good
    • 0
この回答へのお礼

ありがとうございます!

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

お礼日時:2013/07/24 09:13

とりあえず。


勝手に言葉作らないでください。
使うなら、その意味を説明してください。


○#includeを使う場合

// ファイル: test0.h
class testA { 定義... } ;

// ファイル: test0.cpp
#include "test.h"

int main(){
testA objA ;
}

○ 質問者が言うところの「Classで宣言」と思われるもの
// ファイル: test1.cpp
class testA { 定義... } ;

int main(){
testA objA ;
}

でよろしいのですか?それとも別のなにかですか?


もし、この2つなら、単一ソースファイルで使うときは、まったく等価です。
    • good
    • 0
この回答へのお礼

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

ありがとうございます。

お礼日時:2013/07/24 09:24

あまり詳しくはないですが参考までに。



class ~~とクラス名を書くのは、恐らく前方宣言ではないでしょうか。

2つのクラスがお互いのクラスを参照し合っている時に、どちらかのクラスを、中身は書かずにclass クラス名;とだけ書いておいて、後で中身を書くという方法があります。

いずれにせよ、include文は他のヘッダファイルの内容を読み込むものなので、classと使い分けるとかそういうものではないと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/07/24 09:27

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2013/07/24 09:27

質問の意図がわからないんですが・・・



クラスの定義ができるのはclassかstructだけで、
#includeでクラスの定義はできませんけど。

この回答への補足

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

どういうときに#Includeを使い、
どういうときにClassを使うのかを知りたいです。
.

補足日時:2013/07/24 00:44
    • good
    • 0
この回答へのお礼

意図を伝えられず、申し訳ありません。

クラスの定義をする際の話ではなく、クラスを使うときの話でありました。

ありがとうございます。

お礼日時:2013/07/24 09:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!