在我的代码中,有一个基类A有三个子类A1,A2,A3。这些对象有一个状态来指定它们是否处于活动状态。C++找到兄弟的状态
现在在另一个类B中创建A1,A2和A3的对象。现在,在B的内部功能,
int B::SetState(A& aObj)
{
//if aObj is an instance of A1, do nothing and return.
//if aObj is an instance of A2, do something if A3 is active
//if aObj is an instance of A3, do something if A2 is active
//the code below i would like to change to something more maintainable
if (aObj.GetNumber() == 0)
return;
A& otherAObj = aObj.GetNumber()==1? GetAObj(2) : GetAObj(3);
if (otherAObj.IsActive())
{
//do something with aObj
}
}
我想代码更改为类似aObj.DoSomething(),但兄弟之间的相关性使得它很难。任何其他好的想法重构?班级结构必须保持不变。
当你说“如果aObj包含A1”,你的意思是“如果A是A1类的一个实例”?如果是的话,你可能想要搜索双重派遣和访问者模式。 – Rom1 2011-05-05 08:15:59
a)如果性能不成问题,您可以使用RTTI。 b)如果你可以改变A,A1,A2,A3然后使用一个虚函数并在派生类中覆盖它。然后,所有你需要的是做一个aObj.DoSomething() – 2011-05-05 08:51:32
如果你在* call *网站基于对象类型做条件行为,那么你可能确实需要重构... – 2011-05-05 08:55:34