我有一个名为Warrior的类,它具有uint m_healthuint m_maxHealth属性。
我希望我的构造函数采用参数Warrior(uint health, uint maxHealth)

现在我已经学习了很多C++,而且我知道所有的语法等等,但是很难找到有关如何使用这些东西的教程。因此,当health显然无法使用时,我真的不知道该如何定义maxHealthhealth。高于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/

10-10 21:37