我打算有两个bool类成员(m_alive&m_dead),这样他们的值总是相反的.这可能看起来很愚蠢(事实上,它可能只是愚蠢的),但正如您在下面的代码中所看到的,但我真正想要的是根据具体情况更清楚地检查对象状态,并且没有必要输入!m_alive或者是有用的!m_dead.所以,是的,我真的不需要两个成员,但我想不出更简单的方法.
我想到的第一个想法就是创建一个函数来改变其中一个的状态,如果另一个也改变了,但我很确定需要一个更简单,更容易和更快速的方法来保持每一个这是正确的价值.
AFAIK,它不可能用它来做,define因为它会有尽可能多的不同对象,我打算创建并且看起来不实用.
#define object1.m_death= !object1.m_alive;
#define object2.m_death= !object2.m_alive;
// ...
Run Code Online (Sandbox Code Playgroud)
所以在这里你有两个成员的主要想法:
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()
// ...
}
Run Code Online (Sandbox Code Playgroud)
任何有关如何保持更新的建议都是受欢迎的,以及实现我的想法的任何其他方式.提前致谢!
爱德华多
PD:在重新阅读我的问题时,我想到了枚举类型.
它将强制检查dead_or_alive枚举类成员的myobject.m_status==dead或者myobject.m_status==alive,是dead和alive可能的值dead_or_alive m_status.
尽管语法有点长,但这对我正在寻求的方式是否更好?
最终编辑:
感谢所有评论和回答的人.这是我最终采用的解决方案:
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
};
Run Code Online (Sandbox Code Playgroud)
F.b*_*nal 10
class myclass
{
public:
bool isAlive() const { return m_alive; }
bool isDead() const { return !m_alive; }
private:
bool m_alive;
};
int main()
{
myclass myobject;
// (...)
if (myobject.isDead())
//...
if (myobject.isAlive())
// ...
}
Run Code Online (Sandbox Code Playgroud)
您试图通过保留2份相同信息来违反"单一真理来源"最佳做法.
如果您正在寻找清晰度(并且您找不到if(m_alive)并且if(!m_alive)不够清楚),那么请将自定义getter添加到myclass:
bool isAlive() const { return m_alive; }
bool isDead() const { return !m_alive; }
Run Code Online (Sandbox Code Playgroud)