Virtuelle Funktionen
-
Ich hätte eine Frage: Warum und wann braucht man virtuelle Funktionen?
-
Für Polymorphie!
-
Um z.B. Autos und Schiffe als Fahrzeuge in ein Array zu packen und diese fahren zu lassen.
#include <iostream> #include <string> #include <vector> struct Fahrzeug { virtual void fahren() = 0; }; struct Auto : public Fahrzeug { virtual void fahren(){ std::cout<<"brumm"<<std::endl;} }; struct Schiff : public Fahrzeug { virtual void fahren(){ std::cout<<"blubber"<<std::endl;} }; struct schwimmendesAuto : public Auto, public Schiff { virtual void fahren(){ Schiff::fahren(); Auto::fahren();} }; int main(int argc, char* argv[]) { std::vector<Fahrzeug*> fahrzeuge; fahrzeuge.push_back(new Auto()); fahrzeuge.push_back(new Schiff()); fahrzeuge.push_back(reinterpret_cast< Fahrzeug*>(new schwimmendesAuto())); for(std::vector<Fahrzeug*>::iterator it = fahrzeuge.begin();it != fahrzeuge.end();++it) (*it)->fahren(); for(std::vector<Fahrzeug*>::iterator it = fahrzeuge.begin();it != fahrzeuge.end();++it) delete (*it); return 0; }
-
Das kriege ich aber auch nicht-virtuell hin.
-
Wie denn ? Bitte Beispiel posten
-
Du hast Recht. Kann man also sagen: Wenn Methoden 'virtual' sind, Wird zur Laufzeit aufgrund vom Datentyp(abgeleitet) entschieden, welche Funktion zum Einsatz kommt?
-
ja
-
Lass dich knuddeln :). Gibt es noch andere Verwendungszwecke?
-
Reicht das nicht? Du kannst außerdem Klassen virtuell ableiten (wobei das nicht direkt mit deiner Frage zu tuen hat).
grüße