(Anfängerfrage) Polymorphie



  • hi, hab mir eine kleine test-klasse geschrieben anhand derer ich die Polymorphi verstehen will

    class Auto
    {
    private:
    	int ps;
    	std::string hersteller;
    	float zeit_100;
    
    public:
    	Auto(int ps, std::string hersteller, float zeit_100):ps(ps),hersteller(hersteller), zeit_100(zeit_100){};
    	virtual void fahre(){std::cout<<"Ich fahre ein normales Auto";}
    };
    
    class Porsche:public Auto
    {
    public:
    	Porsche(int ps, std::string hersteller, float zeit_100):Auto(ps, hersteller, zeit_100){};
    	virtual void fahre(){std::cout<<"Ich fahre einen Porsche..brummmmm";}
    };
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	Auto * a = new Porsche(200, "Porsche", 2.23f);
    	a->fahre();
    
    	delete a;
    	getch();
    	return 0;
    }
    

    meine Frage ist jetzt, wie kriege ich meine Variable a dazu, jetzt trotzdem die fahre()-Mehtode aus der Oberklasse aufzurufen? (in java geht das durch casten, aber ich habs nicht rausbekommen wie ich in c++ richtig caste um das anzustellen)

    kann mir jemand sagen wie das aussehen müsste?



  • Hab mich erst wenig in diese Dinge eingelesen, aber das sollte nicht verkehrt sein:

    a->Auto::fahre();

    MfG



  • naja Polymorphie heißt ja, dem Objekt informationen über sich selbst mitgeben. Ich habe dir mal hier deinen Code ein wenig gekürzt und umgeschrieben so das es funktioniert so wie du es haben wolltes. 😉

    da ich mich auch noch nciht solange in die Materie eingelesen habe, hoffe ich das alles soweit richtig ist.

    #include<iostream>
    #include<string>
    
    using namespace std;
    
    class Auto
    {
    private:
        int ps;
        std::string hersteller;
        float zeit_100;
    
    public:
    
        virtual void fahre(){std::cout<<"Ich fahre ein normales Auto"<<endl;}
    };
    
    class Porsche:public Auto
    {
    public:
    
        void fahre(){std::cout<<"Ich fahre einen Porsche..brummmmm"<<endl;}
    };
    
    int main()
    {
        Porsche p;
        Auto *zeiger_auf_automobil = &p;
        Auto normales_auto;
    
        zeiger_auf_automobil->fahre(); //Porsche wird aufgerufen
    
        zeiger_auf_automobil = &normales_auto;
    
        zeiger_auf_automobil->fahre();//normales Auto
    
        return 0;
    }
    

    Achja, alle Funktionen die in der Basisklasse

    virtual
    

    sind, sind auch in allen Abgeleiteten Klassen

    virtual
    

    in denen sie Überschrieben werden.



  • ah, ok, danke.

    hat jemand eine idee, was man halbwegs sinnvolles programmieren könnte, wo das Vererbungskonzept benutzt wird. Zu Übungszwecken.

    Ich möchte mich da weiter einarbeiten, aber bis auf so einen 10-Zeiler fällt mir kein Beispiel an, was man da sinnvolles programmierern könnte, ohne das es zum Großprojekt ausufert.

    jemand eine idee?



  • Kannst ja die Vererbungsstruktur von einem RTS machen.

    Also so zum Beispiel Raumschiffe mit mehreren Arten, und je nach dem andere Ausrüstung usw.


Anmelden zum Antworten