类公共变量(游戏)



类(例如游戏的角色类(中声明公共变量会被认为是糟糕的设计吗?

例:

class Character{
public:
    Character();
    int health;
    void attack(int);
private:
    int attackPow;
};

void Character::attack(int hp){
    hp -= attackPow;
}

Character hero;
Character bad;
hero.attack(bad.health);

因为 health 变量是公共的,所以我可以通过在函数中调用它来直接修改它,甚至可以通过获取整个对象并随心所欲地修改其属性,当然,也可以返回整个对象。

但是,如果变量是私有的,我将不得不有一个单独的函数来更改私有变量,从而使代码更加......混乱。。还是有其他方法可以解决这个问题?(你必须原谅我,我还不是专家,但非常有趣的问题,不多(

但这算不算不好的做法?

以下是将health属性设为私有并使用单独函数的优点。现在它可能只是这样:

int getHealth() { return health; }

然而,这只是游戏的开始状态。想象一下,您希望添加更多因素,例如护盾次数,您希望在当前生命值的基础上进行计算。如果在代码中,您只使用了公共变量,那么您现在必须更改所有变量,即;

hero.attack(bad.health + bad.shield);

关于更改一个函数,这是很多工作:

int getHealth() { return health + shield; }

我想这是基于意见的,但这是我的想法:

如果您确定您的类只是没有不变量且永远不会具有不变量的值的聚合,那么您正在寻找一个所有数据成员public struct。这种情况很少发生,比如

struct point {double x,y,z;};

可能是一个例子。

否则,仅使用具有private成员的class并保护这些不变量。

在您的情况下,您应该选择一个有 private 成员的类。例如,您可能想在每次健康值小于或等于零时执行某些操作。您只能为private成员保证这样的事情。

在 中声明公共变量会被认为是糟糕的设计吗 类,例如游戏的角色类?

是的,当然。

但这只是一个指导方针,你知道的。在真实的代码中,在一个真实的项目中,有同事、老板、需求、客户、截止日期、有数千个依赖关系的遗留代码库、公司政治和商业心理,你可能会发现自己应用了糟糕的设计,因为这是正确的事情在宏伟的计划中做。

但是,如果变量是私有的,我将不得不有一个单独的 函数来更改私有变量,从而使代码变得很多 更多。。。混乱

如果变量是私有的,

  • 如果您不希望从外部修改变量,则甚至不需要 setter 方法。

  • 您可以在不更改许多其他源代码文件的情况下更改其类型。

  • 您可以更改其名称,而无需更改许多其他源代码文件或依赖环境的自动重构功能。

  • 您可以通过在 setter 方法中添加错误检查来限制变量可能具有的值的范围。

  • 通过在setter方法中写入日志输出,可以更轻松地添加日志记录以查看变量何时被修改

  • 通过在 setter 方法中设置断点,可以更轻松地设置用于调试的断点。

  • 如果涉及多个线程,您可以更轻松地保证对变量的同步访问。

这只是首先想到的。列表可以更长。

私有变量是用C++(和其他类似的编程语言(创建结构化、可维护代码的核心。

最新更新