Copy Konstruktor bei Vererbung



  • Hi,
    wie muss denn der copy Konstruktor bei Vererbung aussehen?

    Unterklasse::Unterklasse(const Unterklasse& orig) {
        name = orig.name;
        category = orig.category;
    }
    

    Jetzt muss ich noch irgendwie die Attribute von der Oberklasse kopieren, aber wie?

    Derzeit lässt sich das noch nicht kompilieren.. ich weis nicht ob es daran liegt dass ich nicht die attribute von der Oberklasse kopier oder an etwas anderem..

    Unterklasse.cpp:9: error: no matching function for call to ‘Oberklasse ::Oberklasse()’
    Oberklasse.h:12: note: candidates are: Oberklasse::Oberklasse(const Oberklasse&)
    Oberklasse.h:11: note: Oberklasse::Oberklasse(double, double, const std::string&)

    mfg Mokk



  • Mokk schrieb:

    Unterklasse::Unterklasse(const Unterklasse& orig) {
        name = orig.name;
        category = orig.category;
    }
    
    Unterklasse::Unterklasse(const Unterklasse& orig) : Oberklasse(orig){
        name = orig.name;
        category = orig.category;
    }
    

    Gruß,
    CSpille



  • Vielleicht so:

    Unter::Unter(const Unter &u) : Ober(u) { ... }
    


  • Als kurze Anmerkung noch:

    Das Gleiche hast du quasi bei deinem normalen Konstruktor schon gemacht.
    Wenn kein Default-Konstruktor vorhanden ist, muss du explizit angeben,
    welcher Konstruktor der Basis-Klasse verwendet werde soll...

    Nicht nur bei einem Copy-Constructor



  • Wenn schon dann alles in die Initialisierungsliste 🙂

    Unterklasse::Unterklasse(const Unterklasse& orig) : 
        Oberklasse(orig),
        name(orig.name), category(orig.category)
    {}
    

Anmelden zum Antworten