检查其他对象之一是否为真的最佳方法

时间:2015-01-04 12:15:42

标签: c++ function

我正在寻找实施此方案的最佳方式:

我有4个具有布尔成员的对象,在应用程序的流程中,有时它们被设置为true,有时根据条件设置为false;

然后我有最终函数获取这个对象中的一个,并且需要检查其他3个对象中是否有一个成员设置为true。

问题是我知道如何进行脏检查,而我正在寻找更清洁的方法,这是我的最终功能代码:

class Obj
{
public :
   Obj(int _id) : id(_id)
   bool status;
   int id // only 4 objects are created 0,1,2,3
}

m_obj0 = new Obj(0) ;
m_obj1 = new Obj(1) ;
m_obj2 = new Obj(2) ;
m_obj3 = new Obj(3) ;

bool check(Obj* obj)
{
   if(obj->id == 0)
   {
      if(m_obj1->status || m_obj2->status || m_obj3->status)
      {
          return true;
      }
      return false;
   }else if(obj->id == 1)(
      if(m_obj0->status || m_obj2->status || m_obj3->status)
      {
          return true;
      }
      return false;
   }else if(obj->id == 2)(
      if(m_obj0->status || m_obj1->status || m_obj3->status)
      {
          return true;
      }
      return false;
   }else if(obj->id == 3)(
      if(m_obj0->status || m_obj1->status || m_obj2->status)
      {
          return true;
      }
      return false;

}

是否有更简洁的方法来完成此检查功能?

1 个答案:

答案 0 :(得分:3)

您可以将m_obj设置为数组。然后使用for循环检查

bool check(Obj* obj)
{
    for (int i = 0; i < 4; i ++) {
        if (obj->id == i) continue;
        if (m_obj[i]->status == true)
            return true;
    }
    return false;
}

或者将它们加在一起,然后减去m_obj [obj-&gt; id] - &gt; status.Check结果是否为零

bool check(Obj* obj)
{
    int result = m_obj[0]->status+m_obj[1]->statusm_obj[2]->status
                +m_obj[3]->status-m_obj[obj->id]->status;
    return (result!=0);
}