Klasse vererben mit Variable im Konstruktor



  • Hi,

    ich habe eine Klasse Tier mit einem virtual-Member und übergebe in den Konstruktor eine Variable, die danach weitergenutzt werden soll. Diese Klasse soll dann an Hund vererbt werden und nur die virtual-Member geändert werden. Ich habe mal ein Minimalbeispiel erzeugt, wo ich einfach nix zu gefunden habe.

    #include <iostream>
    
    using namespace std;
    
    class Tier
    {
       public:
          virtual void Ausgabe(){cout << "Size: " << size << endl;};
          int size;
    
          Tier(int size){ this->size=size;};
    };
    
    class Hund : public Tier
    {
       public:
          void Ausgabe(){size = size+1; cout << size << endl;}
          Hund(int size){Tier(size);};
    };
    
    int main()
    {
       Tier *tier1(5);
       tier1 = new Hund(5);
    
       tier1->Ausgabe();
    
       return 0;
    }
    

    Was in den Konstruktor von Hund rein muss, damit es funktioniert, ist mir schleierhaft.
    Vielen Dank für eure Mithilfe!

    Gruß,
    phanlipo



  • Niemals new ohne delete verwenden! C++ funktioniert anders als Java. Smartpointer (unique_ptr) gibt's dafür. Am Besten natürlich gar kein new, aber Du willst hier wohl den Basisklassenzeiger nutzen, sonst:

    Hund einHund(5);
    

    Zum Problem:

    Hund(int size) : Tier(size) {}
    

    In Tier auch besser:

    Tier(int size) : size(size) {}
    

    Aber in der main ist auch sonst was kaputt, denn was soll:

    Tier *tier1(5);
    

    denn bitte bewirken? Du initialisierst den Zeiger mit der Addresse 0x00000005, das ist doch albern. Weg mit den Klammern. 🙂



  • Vielen Dank für die Antwort, jetzt funktioniert es. Für die Nachwelt hier mal die korrigierte Fassung:

    #include <iostream>
    
    using namespace std;
    
    class Tier
    {
       public:
          virtual void Ausgabe(){cout << "Size: " << size << endl;};
          int size;
    
          Tier(int size): size(size) {};
    };
    
    class Hund : public Tier
    {
       public:
          void Ausgabe(){size = size+2; cout << size << endl;}
          Hund(int size): Tier(size) {};
    };
    
    int main()
    {
       Hund EinHund(5);
    
       EinHund.Ausgabe();
    
       return 0;
    }
    

Anmelden zum Antworten