簡體   English   中英

基類對派生類的指針的引用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM