05 Feb 2010

Polymorhy in C++

Example for polymorhism in C++

// Polymorphie in C++
// by chrissie 02/2010

#include <iostream>
#include <typeinfo>

using namespace std;

class Verkehrsmittel {
public:
        void bewege () { cout<<"bewege"<<endl; }
        void tanke  () { cout<<"tanke"<<endl; }
};

class Flugzeug: public Verkehrsmittel {
public:
        void bewege() { cout<<"fahre auf Rollbahn"<<endl; }
        void fliege() { cout<<"fliege"<<endl; }
};

class Auto: public Verkehrsmittel {
public:
        void bewege() { cout<<"fahre auf Strasse"<<endl; }
};

int main (void) 
{
        Verkehrsmittel *v = new Verkehrsmittel();       // Verkehrsmittel bauen
        Verkehrsmittel *b = new Flugzeug();             // kein Flugzeug, sondern Verkehrsmittel bauen
        Flugzeug *f = new Flugzeug();                   // Flugzeug bauen
        Auto *a = new Auto();                           // Auto bauen

        v->bewege();
        v->tanke();
        cout <<typeid(v).name()<<endl;
        cout <<"--"<<endl;

        a->bewege();
        a->tanke();
        cout <<typeid(a).name()<<endl;
        cout <<"--"<<endl;

        b->bewege();
        b->tanke();
        cout <<typeid(b).name()<<endl;
        cout <<"--"<<endl;
        //b->fliege();  // Fehlermeldung: fliege ist kein element von Verkehrsmittel

        f->bewege();
        f->fliege();
        f->tanke();
        cout <<typeid(f).name()<<endl;
        cout<<"--"<<endl;

        Flugzeug *x=(Flugzeug*)b;               //Das Verkehrsmittel schnell zum Flugzeug upgraden
        x->fliege();
        cout <<typeid(x).name()<<endl;

        Flugzeug *z=(Flugzeug*)v;               // Flugzeug bleibt Flugzeug
        z->fliege();
        cout <<typeid(z).name()<<endl;

        Flugzeug *y=(Flugzeug*)a;               //Das Auto zum Flugzeug umbauen
        y->fliege();
        cout <<typeid(y).name()<<endl;
}