首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当`healtht`不能大于`maxHealth`时,如何在一个对象中定义`health`和`maxHealth`?

当`healtht`不能大于`maxHealth`时,如何在一个对象中定义`health`和`maxHealth`?
EN

Stack Overflow用户
提问于 2013-05-14 21:33:08
回答 6查看 337关注 0票数 2

我有一个名为Warrior的类,它有uint m_healthuint m_maxHealth属性。我想让我的构造函数接受参数Warrior(uint health, uint maxHealth)

现在我已经学习了C++很多,我知道所有的语法等,但是很难找到关于如何使用这些东西的教程,所以我真的不知道当health显然不能高于maxHealth时,我应该如何定义healthmaxHealth :/

下面是我想到的几种方法:

代码语言:javascript
运行
复制
// 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++中有一种“首选”方式,它会是什么呢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-05-14 21:38:51

我只会在前提条件不满足的情况下放一个断言或抛出异常:

代码语言:javascript
运行
复制
Warrior::Warrior(uint health, uint maxHealth) :
    m_health(health),
    m_maxHealth(maxHealth)
{
    assert(health <= maxHealth); 
    // or throw exception
    throw std::logic_error("explanation");
}

我的意思是,调用者决定取哪个值的理性是什么?如果调用者设置的健康值大于maxHealth -这违反了您的类逻辑,所以我建议立即失败并通知调用者这一点。这应该是软件中的问题,所以我认为隐藏它是不可取的。

异常或断言是一种明确的机制,可以帮助您及早发现和识别此类问题。

票数 2
EN

Stack Overflow用户

发布于 2013-05-14 21:43:49

如果您打算在游戏期间设置健康,您可能需要考虑如下内容:

代码语言:javascript
运行
复制
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);
}
票数 4
EN

Stack Overflow用户

发布于 2013-05-14 21:36:44

有一种“更好”的方式,这取决于你对更好的定义。(我猜你的意思是“更短”)

代码语言:javascript
运行
复制
Warrior::Warrior(unsigned int health, unsigned int maxHealth) :
    m_health(std::min(health, maxHealth)),
    m_maxHealth(maxHealth)
{
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16544648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档