1

チェストは宝物で構成されています。
ここに画像の説明を入力してください
私はそれを次のように実装しました:

treasure.hpp

#pragma once
class Treasure{

    public:
    protected:
    private:

    //data members
    int gold;

};

Chest.hpp

#pragma once
class Chest{

    private: 
    #include "treasure/treasure.hpp"

    public:
    protected:
    private:

    //data members
    Treasure treasure;

};

**両方のヘッダーファイルが対応する「.cpp」でコンパイルされ、オブジェクトファイルが作成されると想定します。*

チェストのクラス宣言内に宝物のヘッダーファイルを含めるのは適切ですか?
私は次の動作をするので、それは私には理にかなっています:
ここに画像の説明を入力してください
**メインはトレジャーを作成したり直接アクセスしたりすることはできません。*

#include "chest.hpp"

int main(int argc, char** argv){

    Chest chest;
}

私はそれをこのように見たことがないので、それが悪い習慣であるかどうかはわかりません。

組成に関して、どちらの方法が好ましいか:

  1. クラス宣言の前にヘッダーを含めます。主に間接的に宝物を含めるのですか?
  2. 上記のように、クラス宣言内にプライベートにヘッダーを含めますか?

4

2 に答える 2

3

クラス宣言#include "treasure.hpp"の前に、chest.hppの一番上にいChestます。すべての宝物がチェストにあるわけではありません。main()にない宝物を作成したい場合はChest、そうすることを許可する必要があります。

一方で、プライベートクラスが役立つ時代は確かに想像できます。このような状況では、プライベートクラスを#includeするのではなく、外部クラス内に直接コーディングします。

于 2013-02-05T01:54:59.833 に答える
1

私はメインにファイルを間接的にインクルードさせます(トレジャーインクルードは胸の上部にあります)。複数のインクルードがあることはあまり意味がありません。実際、これはこれらのプリコンパイラディレクティブの主な用途の1つです。ファイルが複数回含まれることによるコンパイルエラーを防ぐため。

他の方法でそれを行うと、主なことを行うことができませんでした。新しい宝物を作成して胸に追加するか、胸から宝物を取り出して独立して作業します。この実装は、オブジェクトBがオブジェクトAによって排他的に使用された場合にのみ意味があります。

于 2013-02-05T01:55:39.047 に答える