我有一个名为Warrior
的类,它具有uint m_health
和uint m_maxHealth
属性。
我希望我的构造函数采用参数Warrior(uint health, uint maxHealth)
。
现在我已经学习了很多C++,而且我知道所有的语法等等,但是很难找到有关如何使用这些东西的教程。因此,当health
显然无法使用时,我真的不知道该如何定义maxHealth
和health
。高于maxHealth
:/
这是我想到的几种方法:
// method 1
Warrior::Warrior(uint health, uint maxHealth) :
m_health((health > maxHealth) ? maxHealth : health),
m_maxHealth(maxHealth)
{}
// method 2
Warrior::Warrior(uint health, uint maxHealth) :
m_maxHealth(maxHealth)
{
if (health > maxHealth) {
m_health = maxHealth;
}
else {
m_health = health;
}
}
我敢肯定,还有其他方法。
抱歉,如果这只是一个意见问题,但是如果C++中有一种“首选”方式,那会是什么?
最佳答案
如果不满足先决条件,我只会提出一个断言或引发异常:
Warrior::Warrior(uint health, uint maxHealth) :
m_health(health),
m_maxHealth(maxHealth)
{
assert(health <= maxHealth);
// or throw exception
throw std::logic_error("explanation");
}
我的意思是,为 call 者决定采用哪个值的理性依据是什么?如果调用方将运行状况值设置为大于maxHealth,则这违反了您的类逻辑,因此我建议立即失败并通知调用方。这应该是软件中的问题,因此我认为不希望隐藏它。
异常或断言是一种明确的机制,可以帮助您及早发现和识别此类问题。
关于c++ - 当 `health`不能高于 `maxHealth`时,如何在一个对象中定义 `healt`和 `maxHealth`?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16544648/