在C ++中的类内的变量之间传递数据[关闭]
Posted
技术标签:
【中文标题】在C ++中的类内的变量之间传递数据[关闭]【英文标题】:Passing data between variables inside a class in C++ [closed] 【发布时间】: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 .... 我的问题是什么问题?
【问题讨论】:
这段代码无法编译。请分享您的minimal reproducible example,这会给您带来不好的输出 【参考方案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以上是关于在C ++中的类内的变量之间传递数据[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
汇编语言和C语言混合编程时,它们之间是如何传递参数的?请用具体例子说明
在视图控制器之间传递NSString中的数据 - 目标C [重复]