2017-05-18 13 views
1

別のクラスに基底クラスを含めると、その基底の派生クラスも含められますか?私が含まれている場合は、シェイプクラスを言うと、そのクラスは、派生クラスの正方形と円のための基本クラスです、正方形と円は、別のクラスに含まれる。別のクラスに基底クラスを含めると、その基底の派生クラスも含まれます

#include <shapes.h> 

ではなく...

...私はこれをしたいので、私は(ダイヤモンドそれを呼び出す)、後に他の形状クラスを追加することにした場合、それが簡単に書き込みになります
#include <square.h> 
#include <circle.h> 
#include <triangle.h> 
+2

'#include'は、その行にすべてのテキストを挿入するように動作します。 –

+1

クラスは含まれません。あなたはファイルを含んでいます。 –

+4

独自のヘッダをインクルードするには '' 'を使い、システムヘッダだけに' <'を使います –

答えて

3

いいえ、そうではありません。

#include<a.h>を実行すると、プリプロセッサーはa.hの内容を再帰的にインラインでインライン展開します。

あなたの場合、基本クラスのみを取得します。

さらに、これを行うのは良いことではありません(ベースクラスが入っている.hを含めて、すべての派生クラスを取得してください)。

これを行うと、ある日、ベースから派生したクラスだけを作成したい場合は、まったく使用されていないすべての派生クラスを含めて、コードサイズを増やします。

1

いいえ、派生クラスのヘッダーファイルは自動的には含まれません。しかし、幸いなことに、ほとんどの場合、派生クラスのヘッダーファイルはまったく含まない必要があります。異なるシェイプオブジェクトを作成するコードでは、円と三角形について知る必要がありますが、ほとんどの場合、 (例えば)形状を描画するコードでは、単に与えられる形状のどんな種類のものであれ、正しいことをする仮想関数drawを単に呼び出すことができます。仮想関数は、コールシェイプのdraw関数が、コールの行われたファイルにヘッダファイルが含まれていなくても、サークルとトライアングルのオーバーライドバージョンを正しく呼び出すように実装されています。

円や三角形(したがってヘッダーファイルを含める必要がある)があるかどうかをコードで定期的に確認する必要がある場合は、おそらくシェイプクラスのインターフェイスの問題を指摘します。その場合、シェイプをもう一度見て、仮想関数を呼び出すことができるようにシェイプを変更して、各シェイプの正しいインプリメンテーションをコンパイラーが並べ替えることができるかどうかを確認する必要があります。

多くの場合、一緒に組み込みたいヘッダーファイルを一杯にするというより一般的な問題のために、他のすべてのヘッダーファイルを含む単一のヘッダーファイルを作成すると、簡単に作業できます。たとえば、shape_library.hを作成し、そこにさまざまなシェイプヘッダーすべてに対して#includeを入力します。そうすれば、その他にはshape_library.hを含めることができ、ヘッダーが再配置される場合は、変更する場所が1つしかありません。

関連する問題