[英]Base Class reference to Pointer of Derived Class
我想在基類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引用會自動更改。 確切地說,我希望該函數將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)
{
}
但是我最后在DerivedClassAController中有一個m_current指向DerivedDataClassB。
這可以實現嗎? 還是有更好的方法來做到這一點?
注意: DerivedClassAController將在95%的時間內將m_currentA用作DerivedDataClassA。 在基類中僅使用m_current指針將結束將dynamic_cast(m_current)放在所有地方。
我認為以下方法會起作用:在BaseClassController
中創建一個返回指針副本的虛擬函數,而不是使用成員引用:
struct BaseClassController {
virtual BaseDataClass* m_current() = 0;
並在每個派生的控制器中以不同的方式實現它:
BaseDataClass* DerivedDataClassA::m_current() {
return m_currentA;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.