Unterschiedliche Funktionswerte bei gleicher Klassenadresse



  • Hallo,

    bin ehrlicherweise etwas verwirrt

    Ich benutze eine Basisklasse als Grundlage für verschiedene Datenarrays

    class clsTableBase
    {
        public:
            enTableType eTableType;
    };
    

    Von dieser Klasse leite ich Datenklassen ab

    class clsTable_ALL_DATA  : public clsTableBase
    {
        public:
            string  m_UUID;
            int     m_ID_DATA;
            ....
    }
    

    In eine anderen Basisklasse clsTpl erzeuge ich einen Pointer auf ein Vector-Array von clsTableBase als member-variable

    vector<clsTableBase>* m_paTable;
    

    Von clsTpl leite ich dann höherwertige Klasse ab, bei der ich dann ein vector array von clsTable_ALL_DATA erstelle.

    vector<clsTable_ALL_DATA> m_aTable;  // Statisch als Member-Variable
         ......
         m_paTable=(vector<clsTableBase>*)&m_aTable;
    

    Wenn ich jetzt m_aTable Werte Zuweise, so kann ich diese mit m_paTable referenzieren. So weit , so gut.

    Wenn ich nach der Zuweisung von "m_paTable=(vector<clsTableBase>*)&m_aTable;" m_aTable später ändere (clear()+neue elemente einfügen), so scheinen diese Änderungen nicht mehr Vollständig über m_paTable zu dereferenzieren zu sein:

    Beispiel:

    printf ("pointer, werte: %p %p %d %d\n", m_paTable,&m_aTable,m_paTable->size(), m_aTable.size());
    

    Ergibt

    pointer, werte: 0x12121212 0x12121212 12 9

    Gleiche Pointer Adresse, unterschiedliche Werte!

    Aber:

    printf ("pointer, werte: %p %p %d %d\n", m_paTable,&m_aTable,((vector<clsTable_ALL_DATA>*)m_paTable->)size(), m_aTable.size());
    

    Ergibt

    pointer, werte: 0x12121212 0x12121212 9 9

    Mein Verständnis war bisher, das ich Elemente der Basisklasse abfragen kann (hier der vector), ohne das ich zur abgeleiteten Klasse casten muss.

    Die ich in diesem Fall in clsTpl z.B. die size() Funktion von m_paTable abfrage ohne die Ableitungen zu kennen, stellt mich das vor echte Schwierigkeiten.

    Hat da einer eine Idee, was ich da falsch mache?

    (Gnu c++ Compiler)



  • [klugscheißer]
    das Keyword 'class' habe ich in C noch nie gesehen
    [/klugscheißer]



  • Erstens falsches Forum, zweitens benutze keine Vererbung wenn du nicht absolut unbedingt musst, es ist unwartbar.
    Für die eigentliche Frage habe ich aber irgendwie keine Antwort, sorry.


Anmelden zum Antworten