On Sun, Jun 03, 2001 at 09:53:46AM +0000, Matthias Petermann wrote:
Hallo,
Hallo Matthias,
erst einmal vielen Dank für Eure Hilfe. So funktioniert es prima, allerdings bin ich gleich auf ein weiteres Problem gestoßen:
<schnipp>
main() { c_fahrzeug *fahrzeug[ 3 ];
fahrzeug[ 1 ] = new bus( ); fahrzeug[ 2 ] = new bahn( );
fahrzeug[ 1 ] -> start( ); fahrzeug[ 2 ] -> start( ); fahrzeug[ 2 ] -> notbremsen( ); }
Ich bin mir nicht ganz sicher, da ich nicht gerade der C++-Profi bin, aber meines Wissens nach kann der Compiler nicht von selbst aus `fahrzeug' wieder die richtige Klasse erzeugen. Daher müsstest du in der Klasse `fahrzeug' noch eine Variable definieren, in der der Typ der Klasse gespeichert wird. Dann sieht der Code so aus:
if (fahrzeug[1]->type() == "Bahn") { bahn* obj = (bahn*)fahrzeuge[1]; obj->start(); obj->notbremsen(); }
if (fahrzeug[1]->type() == "Bus") { bus* obj = (bus*)fahrzeuge[1]; obj->start(); }
Normalerweise brauchst du das aber gar nicht, da man über so eine Liste sowieso nur die Methoden aufruft, die die Basisklasse beinhaltet. Bei Qt kann man z.B. setGeometry(), setFocus() o.ä. über solche Listen behandeln, da alle Widgets von QWidget abgeleitet sind, welches diese Methoden definiert.
Ciao, Tobias