首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
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

Stack Overflow用户

发布于 2013-05-14 21:37:46

代码语言:javascript
运行
复制
template <typename T>
class RangeBoundValue
{
public:
    RangeBoundValue(const T _min, const T _max) : _min(_min), _max(_max) {}

    void setValue(T val)
    {
        if (val < _min) _value = _min;
        else if (val > _max) _value = _max;
        else _value = val;
    }

    T value() const {return _value;}

private:
    const T _min;
    const T _max;
    T       _value;
};

Warrior中使用此帮助器类

代码语言:javascript
运行
复制
class Warrior
{
...
private:
    RangeBoundValue<uint> _health;
};
票数 2
EN
查看全部 6 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16544648

复制
相关文章

相似问题

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