Zwracanie odpowiedniego obiektu

Zwracanie odpowiedniego obiektu
N1
  • Rejestracja:około 17 lat
  • Ostatnio:ponad 9 lat
0

W moim kodzie mam klasy podobne do tych:

Kopiuj
    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:

Kopiuj
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 :)

edytowany 2x, ostatnio: norbi123
AL
  • Rejestracja:około 15 lat
  • Ostatnio:ponad 12 lat
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.