在我的代碼中,有一個基類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