1

だから私はD&Dでキャラクターを定義するクラスを作っています。クラスを設定する方法は、パブリックメンバーがヘッダーで定義され、.cpp でプライベートであるため、外部に公開されないということでした。これどうやってやるの?現在、このように見えますが、間違っていると確信しています。

character.h:

namespace d20 {
    class character {
    public:
        character(void);
        virtual ~character(void);

        // get stats
        int getStr();
        int getDex();
        int getCon();
        int getIntl();
        int getWis();
        int getCha();

        // get modifiers of the stats
        int getStrMod();
        int getDexMod();
        int getConMod();
        int getIntlMod();
        int getWisMod();
        int getChaMod();
    };
};

キャラクター.cpp:

namespace d20 {
    class character {
    private:
        int str;    // strength
        int dex;    // dexterity
        int con;    // constitution
        int intl;   // intelligence
        int wis;    // wisdom
        int cha;    // charisma

        int hp;     // hit points
        int ac;     // armor class
    };
    character::character(void) {

    }

    character::~character(void) {

    }
}

はい、私はトンが欠けていることを知っていますが、それは重要ではありません. Visual Studio 2010 では、クラス ビューで character という名前の 2 つのクラスとして表示されます。意図したことを達成するにはどうすればよいですか? これは割り当てであり、とにかくすべてのコードが表示されるため、これは大した問題ではありませんが、将来的には、.h ファイルからプライベート メンバーを除外するのがおそらく賢明でしょうか?

4

3 に答える 3

4

privateメンバーを同じヘッダー ファイルに入れるだけです。設計上、クラス定義を異なるファイルに分散することはできません。

privateそもそも、これらのメンバーがクライアントに表示されないようにしたいのはなぜですか? とにかくprivate直接アクセスすることはできません。

編集:

これらのプライベート メンバーは、クラスの実装の詳細です。コンパイラはクラスのオブジェクトのサイズを知る必要がある場合があるため、クラスの定義に含める必要があります。

int main()
{
  character ch;

  // pass by value
  Func(ch);
  ..
}

上記の例では、コンパイラはchの定義を見ない限りのサイズを知る方法がなくcharacter、クラス定義を調べることでサイズを把握できます! これが、クラス定義に実装を入れる必要がある理由の 1 つです。

于 2011-10-20T03:08:00.223 に答える
1

これらのプライベート宣言をヘッダー ファイルに移動することをお勧めします。

private:
    int str;    // strength
    int dex;    // dexterity
    int con;    // constitution
    int intl;   // intelligence
    int wis;    // wisdom
    int cha;    // charisma

    int hp;     // hit points
    int ac;     // armor class
于 2011-10-20T03:11:48.070 に答える
-1

まず、2 つのクラスを宣言しています。

.h に 1 つ、.cpp に 1 つ、同じ名前で。コンパイルさえできると思いますか?また、ものを非公開にするということは、他のクラスやオブジェクトからアクセスできないことを意味します。& 人がこのようにあなたの .h を見ることができたら、あなたの .cpp を見ることができないと思いますか?

.h と .cpp は別々のものではありません。彼らは最終的に単一のエンティティを形成しています。コンパイル中に、すべてのヘッダーの内容が .cpp ファイルにマージされます。& すべての .cpp を、最終的に dll または exe、またはマシンが理解して実行できるものに変換します。.h は、コードをきれいにするためだけに形成されます。

ヘッダーでプライベートにすると、よりクリーンになります。

于 2011-10-20T06:03:14.940 に答える