【问题标题】:Passing data between variables inside a class in C++ [closed]在C ++中的类内的变量之间传递数据[关闭]
【发布时间】:2021-09-08 15:19:10
【问题描述】:

我不完全理解,也没有在网上找到任何关于这个主题的东西,但是这段代码(减少了,所以它不会是 500 行代码):

class Character{
public:
int MaxHP;
int currentHP;
currentHP = MaxHP;
int getHP()
{
    return CurrentHP;
}
Character(int h){
    maxHP=h
};
~Character(){};
};
int main()
{
Character warrior(300)
cout<<getHP();
return 0;
};

最大生命值 = 300 当前HP = -875000 现在尝试访问 currentHP 的值,我得到 -87878 .... 我的问题是什么问题?

【问题讨论】:

标签: c++ class


【解决方案1】:

如果你想初始化一个私有变量,最好在构造函数中完成:

class Character{
private:
    int MaxHP;
    int currentHP;
public:
    Character() : MaxHP(0), currentHP(MaxHP){}
}

【讨论】:

  • 这是一种不好的技术。它很脆。如果有人更改了班级中班级成员的顺序,那么这将有UB。
  • 这就是你在初始化列表中使用声明顺序的原因。
  • 初始化列表的顺序无关紧要。这就是为什么这是一个糟糕的技术。类成员总是按照它们在类中声明的顺序进行初始化。如果我更改了声明成员的顺序,我不想记住也要检查每个构造函数。
  • 我想要得到的是两个变量 1,它获取我从对象获得的 Hp 的值,第二个是在受到伤害时改变它的值。战斗结束后,我想增加 MaxHP 的值,让我们说 +5 并将其传递给变量 currentHP,以便它可以再次受到伤害。所以这个过程是开始战斗 300 hp 损失一些金额,战斗结束后将值重置为 300 并添加 5。以 305 Hp 等开始新的战斗。
  • 你的代码没有错(除了;之外),但它很脆弱。假设下一个处理它的人喜欢按字母顺序对成员进行排序。他们甚至可以打开警告以了解初始化列表的错误顺序,但在“修复”代码静默编译并具有 UB 之后:godbolt.org/z/rddG8cj19
猜你喜欢
  • 1970-01-01
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 2019-04-18
  • 2015-04-03
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
相关资源
最近更新 更多