1

所以我正在创建一个类来定义 D&D 中的角色。我认为设置类的方式是公共成员在标题中定义,在 .cpp 中定义为私有成员,因此它们不会向外界透露,对吗?你怎么做到这一点?目前它看起来像这样,我确定这是错误的。

字符.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 在类视图中将其显示为 2 个名为 character 的类。我如何完成我的意图?这无关紧要,因为它是一项任务,并且所有代码无论如何都是可见的,但是对于未来,将私有成员排除在 .h 文件之外可能是明智之举吗?

4

3 回答 3

4

只需将private成员放在同一个头文件中。类定义不能按设计分布在不同的文件中。

为什么您首先要阻止这些private成员被客户看到?作为private,它们无论如何都不能直接访问。

编辑:

这些私有成员是类的实现细节。它们必须在类的定义中,因为有时编译器需要知道类对象的大小:

int main()
{
  character ch;

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

在上面的示例中,编译器无法知道 的大小,ch除非它看到 的定义character,并且它可以通过查看类定义来计算大小!这就是为什么需要将实现放在类定义中的原因之一。

于 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 中的一个和 .cpp 中的 1 个具有相同的名称。你认为它甚至会编译吗?此外,将事物设为私有意味着其他类和那里的对象将无法访问它。& 你认为如果一个人可以看到你的.h 这样他就看不到你的 .cpp 了吗?

.h & .cpp 不是独立的东西。他们终于形成了一个单一的实体。在编译期间,所有头文件内容都合并到 .cpp 文件中。& 所有的 .cpp 最终变成一个 dll 或 exe 或机器可以理解和运行的东西。.h 的形成只是为了使代码更干净。

在标题中将其设为私有,这样会更干净。

于 2011-10-20T06:03:14.940 回答