2

私のアプリケーションは、抽象基本クラスから継承するいくつかのコンポーネントで構成されています。各コンポーネントが上書きするこの 2 つのメンバー関数を除いて、どのコンポーネントにも public 宣言はありません。

class Component()
{
public:
    virtual void Init() = 0;
    virtual void Update() = 0;
};

他にパブリック メソッドやメンバーが存在しないため、ヘッダー ファイルを作成する意味はありますか? コンパイル時間を節約できますか、それとも別の方法がありますか?

4

5 に答える 5

2

から派生した多くの派生クラスがある場合Componentは、別のヘッダー ファイルに配置できます: IComponent.h. IC++ の抽象クラスであるインターフェイスを示します。これにより、コード構造が非常に明確になります。

virtual destructor抽象クラスを定義していないため、コードには UB があります。

class Component()
{
public:
    virtual ~Component();      
    virtual void Update() = 0;
};

ベースへのポインターを介して派生型のオブジェクトを削除すると、未定義の動作が発生します。

また、@Griwesが指摘しているように、コンストラクターを使用してメンバーを初期化するだけで、冗長なvirtual Init機能は必要ありません。

于 2013-01-21T23:05:09.103 に答える
2

単一の CPP ファイルの外部でクラスを使用しない場合、ヘッダーは必要ありません。それ以外の場合は、自分の責任でヘッダー ファイルを作成することを避けることができます。潜在的な損失 (基底クラスの一貫性のない再宣言) は、潜在的な利益 (コンパイル時間の高速化) をはるかに上回ります。プロジェクト全体の可読性も低下します。プロジェクトの他の読者はヘッダーがそこにあることを期待し、異なるファイルに複数のコピーがあることに驚くでしょう。

于 2013-01-21T23:07:42.157 に答える
1

いいえ、ヘッダファイルを書く必要はありません。

于 2013-01-21T23:03:11.897 に答える
1

クラスをどのように使用するかは完全にあなた次第です。派生クラスを 1 つのソース ファイルでのみ使用している場合、ヘッダー ファイルを使用する特別な理由はありません。

10 年以上前のマシンで実行している場合を除き、コンパイル時間については心配しません。最新のマシンのキャッシュ ディスクは非常によく読み取られ、おそらく数メガバイトの他のヘッダー ファイルが含まれます。

ただし、他のプロジェクトでクラスを「再利用」したい場合、これは非常に困難です。

于 2013-01-21T23:03:26.920 に答える
0

ヘッダーを作成することは、パフォーマンスの向上が目を見張らない小さなプログラムであっても、通常は良い考えです。習得すべき良いコーディング習慣です。:)

http://www.cplusplus.com/forum/articles/10627/

于 2013-01-21T23:04:10.163 に答える