C++ 保留两个具有相反值的bool类成员

C++ 保留两个具有相反值的bool类成员,c++,class,c++11,C++,Class,C++11,我计划有两个bool类成员(m_alive和m_dead),这样它们的值总是相反的。这可能看起来有些愚蠢(事实上,它可能只是愚蠢),但正如您在下面的代码中所看到的,但我真正想要的是有一种更清晰的方法根据情况检查对象状态,不必键入!m_活着或!m_死了。 所以,是的,我真的不需要两个成员,但我想不出一个更简单的方法来做到这一点 我想到的第一个想法是创建一个函数,如果另一个函数也发生了变化,它会改变其中一个函数的状态,但我很确定需要一种更简单、更简单、更快速的方法来保持每个函数的正确值 顺便说一句,

我计划有两个bool类成员(
m_alive
m_dead
),这样它们的值总是相反的。这可能看起来有些愚蠢(事实上,它可能只是愚蠢),但正如您在下面的代码中所看到的,但我真正想要的是有一种更清晰的方法根据情况检查对象状态,不必键入
!m_活着
!m_死了
。 所以,是的,我真的不需要两个成员,但我想不出一个更简单的方法来做到这一点

我想到的第一个想法是创建一个函数,如果另一个函数也发生了变化,它会改变其中一个函数的状态,但我很确定需要一种更简单、更简单、更快速的方法来保持每个函数的正确值

顺便说一句,用
定义
是不可能的,因为它们的数量和我计划创建的不同对象一样多,而且似乎不实用

#define object1.m_death= !object1.m_alive;
#define object2.m_death= !object2.m_alive;
// ...
所以这里你有两个成员的主要想法:

class myclass
{
    public:
    // (...)
    private:
        bool m_alive;
        bool m_death;   // Always !m_alive
};

int main()
{
    myclass myobject;
    // (...)
    if (myobject.m_dead)
    //...
    if (myobject.m_alive)   // clearer than !myobject.m_dead()
    // ...
}
欢迎任何关于如何保持更新的建议,以及任何其他实现我想法的方法。提前谢谢

爱德华多

PD:在重读我的问题时,我突然想到了枚举类型

它需要检查死枚举类型类成员的死枚举或活枚举状态的可能值

尽管语法稍微长一点,但这是一种更好的方法吗


最终编辑

感谢所有评论和回答的人。以下是我最终采用的解决方案:

enum Piece_status:bool{     dead= false,    alive= true};

class Piece
{
    public:
        bool isAlive() const    {return  m_status;}
        bool isDead()  const    {return !m_status;}
    protected:      
        Piece_status        m_status;   // dead=false, alive=true
};

您试图保留相同信息的两份副本,这违反了最佳做法

如果您正在寻找清晰性(并且您没有找到
If(m\u alive)
If(!m\u alive)
足够清晰),那么将自定义getter添加到
myclass

bool isAlive() const { return m_alive; }
bool isDead() const { return !m_alive; }

您可以通过使用setter更改变量来实现这一点:

// optional setters
void setDead() { setDead(true); }
void setAlive() { setDead(false); }

// main setter
void setDead(bool isDead) {
    m_alive = !(m_dead = isDead);
}

他们是私人的。所以你的代码不会编译。您应该向类中添加查询,而不是添加冗余字段
myobject.is_dead()
myobject.is_alive()
都可以在单个
bool
中实现。它是冗余的,实际上并不需要<代码>!myobject.m_dead
与myobject.m_alive
一样清晰。有两种方法:is_alive is_dead,并将其实现基于bool@macroland如果你有一个公共getter和一个公共setter,它基本上是一个公共变量。缓存失效、命名和逐个关闭错误。您对两个变量的选择会导致在两个点中有一个值的“缓存”(我是活着还是死了?)。不要给自己制造麻烦。我会让那些成员函数
const
很高兴知道最佳实践的名称,这样就不会再犯了,谢谢!还有答案,这正是我想要的!
// optional setters
void setDead() { setDead(true); }
void setAlive() { setDead(false); }

// main setter
void setDead(bool isDead) {
    m_alive = !(m_dead = isDead);
}