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.