我有一个名为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++中有一种“首选”方式,它会是什么呢?
发布于 2013-05-14 21:38:51
我只会在前提条件不满足的情况下放一个断言或抛出异常:
Warrior::Warrior(uint health, uint maxHealth) :
m_health(health),
m_maxHealth(maxHealth)
{
assert(health <= maxHealth);
// or throw exception
throw std::logic_error("explanation");
}我的意思是,调用者决定取哪个值的理性是什么?如果调用者设置的健康值大于maxHealth -这违反了您的类逻辑,所以我建议立即失败并通知调用者这一点。这应该是软件中的问题,所以我认为隐藏它是不可取的。
异常或断言是一种明确的机制,可以帮助您及早发现和识别此类问题。
发布于 2013-05-14 21:43:49
如果您打算在游戏期间设置健康,您可能需要考虑如下内容:
Warrior::Warrior(unsigned int health, unsigned int maxHealth) :
m_maxHealth(maxHealth)
{
setHealth(health);
}
void Warrior::setHealth(unsigned int health)
{
m_health = std::min(health, m_maxHealth);
}发布于 2013-05-14 21:36:44
有一种“更好”的方式,这取决于你对更好的定义。(我猜你的意思是“更短”)
Warrior::Warrior(unsigned int health, unsigned int maxHealth) :
m_health(std::min(health, maxHealth)),
m_maxHealth(maxHealth)
{
}https://stackoverflow.com/questions/16544648
复制相似问题