Zwracanie odpowiedniego obiektu

0

W moim kodzie mam klasy podobne do tych:

    class A
    {
     enum eType
     {
      A=0,
      B,
      C
     };
     virtual eType ReturnType()
     {
      return A;
     }
    };
    
    class B : A
    {
     eType ReturnType()
     {
      return B;
     }
    }
    
    class C : A
    {
     eType ReturnType()
     {
      return C;
     }
    }

dodatkowo mam liste MFC CList na ktorej trzymam te obiekty i chciałbym napisać funkcję podobną do tej, poniezej ktora niestety nie dziala:

auto GetObjectFromList
{
 return object;
}

która wykrywałaby poprawnie obiekt, który aktualnie jest pobierany z listy i moglbym korzystac z metod klasy np. B. Moja lista wyglada tak

CList<A,A> lista;

Czy moge w jakis sposob z tej listy zwracaj i wykrywac automatycznie obiekty klas pochodnych? i prosze bez pytan czemu MFC a nie stl bo ja tego nie wybieralem :)

0

Z tego co widzę to masz listę obiektów typu A. Jeżeli do takiej listy wkładasz przez wartość obiekt klasy B, która dziedziczy po klasie A, to obiekt klasy B zostaje "przycięty" do obiektu klasy A i już dłużej nie jest obiektem klasy B, a jedynie jego częścią odpowiadającej obiektowi A. Tak więc nie możesz z takiej listy wyjąć obiektu klasy pochodnej, a jedynie obiekt klasy bazowej. Możesz to obejść robiąc listę wskaźników na obiekty klasy bazowej i za pomocą polimorfizmu wywoływać zachowania klas pochodnych. Ewentualnie możesz wyciągać wskaźnik na klasę bazową i rzutować wskaźnik pochodnej, co nie zawsze jest bezpieczne, bo generalnie nie wiesz jaki naprawdę jest obiekt docelowy, chyba żebyś użył RTTI.

1 użytkowników online, w tym zalogowanych: 0, gości: 1