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; }