Ich hab ein Array von i Objekten der Klasse 'Zeichen':
C++:
zeichen = new Zeichen[i];
Nun soll das letzte Zeichen ein Objekt der Klasse 'Ziffer' sein:
C++:
zeichen[i-1] = *(new Ziffer);
wobei durch
C++:
class Ziffer : public Zeichen
alle Methoden von Zeichen auch an Ziffer vererbt werden. Nun hat jedes Zeichen die Methode
C++:
virtualvoid Zeichen::m_Update() { y = x; }
und jede Ziffer die Methode
C++:
void Ziffer::m_Update() { x = y; }
Wenn ich jetzt den Zeichen-Array durchgehe mit
C++:
for (k=0; k<i; k++) zeichen[k].m_Update();
wird immer die Methode Zeichen::m_Update() aufgerufen aber nicht beim letzten Zeichen (der Ziffer) die Methode Ziffer::m_Update().
Kann mir jemand sagen was ich falsch mache und wie ich erreichen kann, das in einem Array verschiedene Klassen unterkommen und jeweils die entsprechenden Methoden ausgeführt werden?
Danke, Joschi
Bearbeitung von Pablo:
[ /cpp ] tag eingefügt
Dieser Post wurde am 06.04.2004 um 17:17 Uhr von Pablo editiert.
Deklarier mal die Methode m_Update() von Ziffer auch als virtual. Ich bin mir nicht sicher aber ich glaube daran liegt es. Poste wenn es funktioniert hat, dann poste nochmal und ich werde dir die Erklärung geben, die ich im Kopf habe. -- All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
typecast postete Deklarier mal die Methode m_Update() von Ziffer auch als virtual. Ich bin mir nicht sicher aber ich glaube daran liegt es. Poste wenn es funktioniert hat, dann poste nochmal und ich werde dir die Erklärung geben, die ich im Kopf habe.
Um Polymorphie zu erreichen (das was Du willst) muss auf das Objekt per Zeiger oder Referenz zugegriffen werden. Dein Array ist aber ein Array von Objekten, nicht von Zeigern auf Objekte. Oder Du bildest bei jedem Durchlauf einen Zeiger auf ein Objekt und benutzt diesen dann -- Reden ist Schweigen und Silber ist Gold.
stephanw postete Um Polymorphie zu erreichen (das was Du willst) muss auf das Objekt per Zeiger oder Referenz zugegriffen werden. Dein Array ist aber ein Array von Objekten, nicht von Zeigern auf Objekte. Oder Du bildest bei jedem Durchlauf einen Zeiger auf ein Objekt und benutzt diesen dann
Jawoll, über einen Array von Zeigern klappts vorzüglich!! Vielen Dank!!