Konstruktor-parameter vererben



  • Hi

    ich will eine Klasse schreiben , z.B Fahrzeug, bei der man als Konstruktorparameter die Höchstgeschwindigkeit angeben kann.

    Wenn ich jetzt eine Klasse Auto schreiben will, die von Fahrzeug erbt, aber zusätzlich noch das Modell als Parameter will, wie muss ich dann vorgehen ?

    class fahrzeug
    {
        protected :
            int maxspeed;
        public :
            fahrzeug(maxspeed) {this->maxspeed = maxspeed;}
    }
    

    und dann ?



  • du kannst den ctor nicht vorgeben,dafür bietet C++ keine funktionalität.
    hier ein beispiel, wieso das auch nicht sinnvoll ist:

    //dummes beispiel^^
    class fahrzeug
    {
        protected :
            int maxspeed;
        public :
            fahrzeug(maxspeed) {this->maxspeed = maxspeed;}
    }
    class Markenauto:public fahrzeug{
        private:
            std::string marke;
            std::string bezeichnung;
        public:
            Markenauto(std::string Marke,std::string Bezeichnung):marke(Marke),bezeichnung(Bezeichnung){
                if(Marke=="Porsche"&&Bezeichnung=="Boxter"){
                     maxspeed=irgendeineSchöneZahl;
                }
            } 
    };
    

    im ctor kommt keinmal int vor, trotzdem wir der integer wert gesetzt 😉



  • muss ich also für jede klasse den Konstruktor extra schreiben ?



  • ja



  • beim konstruktor von fahrzeug bekomme ich eine Fehlermeldung

    fahrzeug(maxspeed) {this->maxspeed = maxspeed;}

    parse error before ")" token



  • da fehlt ein int-.-
    hab den von dir kopiert, ohne nochma drüberzuschaun^^



  • oben schreibst du, es steht kein einziger Int.wert im Konstruktor.
    Daraus folgere ich, dass das Absicht ist.

    Was ist denn nun richtig ?



  • im von mir angelegten konstruktor gibts kein int, das war nur ein beispiel, um zu zeigen, wieso eine vererbung eines ctor parameters nicht sinnvoll ist.



  • @imson
    Also wenn du für deine abgeleitete Klasse einen zusätzlichen Parameter brauchst, dann würde ich das so machen

    class fahrzeug
    {
    private:
        int maxspeed_;
    public:
        explicit fahrzeug(int maxspeed)
            : maxspeed_(maxspeed)
        {
        }
    };
    
    class hotrod
        : public fahrzeug
    {
    private:
        model_type model_;
    public:
        hotrod(int maxspeed, const model_type& model)
            : fahrzeug(maxspeed)
            , model_(model)
        {
        }
    };
    

    Kann aber auch sein, dass ich dich vollkommen missverstanden hab, da ich momentan auch nicht ganz kapier, auf was otze hinauswill.


Anmelden zum Antworten