我希望在基類A中有一個引用(或指針,如果不可能的話)指向派生類中的指針。 這應該是這樣的:對派生類指針的基類引用
BaseClassController
{
public :
//Constructors, destructor,...
protected :
BaseDataClass *& m_current;
}
DerivedClassAController : public BaseClassController
{
public :
//Constructors, destructor,...
protected :
DerivedDataClassA * m_currentA;
}
DerivedClassBController : public BaseClassController
{
public :
//Constructors, destructor,...
protected :
DerivedDataClassB * m_currentB;
}
與數據類之中:
BaseDataClass
{
void doSomething();
}
DerivedDataClassA : public BaseDataClass
{
//...
}
DerivedDataClassB : public BaseDataClass
{
//...
}
我想在BaseClassController接下來要做的是:
BaseClassController::someFunction(){
m_current->doSomething();
}
的問題是,由m_currentA和m_currentB指向的對象在程序的整個生命週期中會發生很大的變化,並且我希望m_current引用在deriv編輯類指針改變。 較具體來說,我想功能改變由m_currentA指向的對象是這樣的:
DerivedClassAController::changerCurrentA(DerivedDataClassA* ptA){
m_currentA = ptA;
}
,而不是像這樣:
DerivedClassAController::changerCurrentA(DerivedDataClassA* ptA){
m_currentA = ptA;
m_current = ptA;
}
我試圖通過傳遞指針在派生類的構造函數:
BaseClassController::BaseClassController(BaseDataClass* pt)
: m_current(pt)
{
}
DerivedClassAController::DerivedClassAController()
: BaseClassController(m_currentA),
m_current(A)
{
}
但我最終有一個m_current指向DerivedClassAController中的DerivedDataClassB。
這是不可能的嗎?或者有更好的方法來做到這一點?
注意: DerivedClassAController將使用m_currentA作爲DerivedDataClassA 95%的時間。在基類中只使用m_current指針將結束在每個地方放入dynamic_cast(m_current)。
'多態性' - 你試過了嗎?你能通過'm_current'指針做你需要的一切嗎? – LogicStuff
'BaseClassController'中的virtual BaseDataClass * GetCurrent()= 0;並且讓兩個派生控制器分別實現它並返回當前值'm_currentA'或'm_currentB'。 –
LogicStuff - 我添加了一個註釋來解釋爲什麼我不能像你所建議的那樣做。伊戈爾 - 這可以工作是的!我會嘗試。但我也想知道它是否可以按照我嘗試的方式工作 – ElevenJune