c++ - C++ 中的类成员隐私和 header

标签 c++ oop private-members access-specifier

所以我正在创建一个类来定义 D&D 中的角色。我认为设置类(class)的方式是公共(public)成员在 header 中定义,而私有(private)成员在 .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 在类 View 中将其显示为 2 个名为 character 的类。我如何实现我的意图?这无关紧要,因为这是一项任务,而且所有代码都是可见的,但对于 future ,将私有(private)成员排除在 .h 文件之外可能是明智的,对吧?

最佳答案

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

为什么首先要防止那些 private 成员被客户看到?作为私有(private),无论如何都不能直接访问它们。

编辑:

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

int main()
{
  character ch;

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

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

关于c++ - C++ 中的类成员隐私和 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7830639/

相关文章:

c++ - FreeRTOS 仅在发布时崩溃

java - 覆盖现有的对象图?

c# run方法来自抽象和继承者的单个实例

javascript - 实例共享原型(prototype)方法以与私有(private)实例变量一起使用

c++ - 使用 OpenGL 和 SDL 的 Sprite 表

c++ - 应用 Microsoft 更新后,MSMQ 在 MQOpenQueue 上抛出异常

c++ - 如何在 C++ xcode 项目中使用动态共享库?

c# - 如何/何时在 OOP 中编写可重用的方法

C++阅读器函数设计: helper functions,类,私有(private),过度工程?

java - 为什么外部Java类可以访问内部类私有(private)成员?