Parent Constructer
-
Hey Leute ich würde gerne wissen wieso das nicht funktioniert:
Ich habe hier eine funktion die die Klasse Obst erwartet
void doSomething(Obst obst) { }Nun wollte ich die Klasse übergeben
class Obst { Obst(std::string irgendWas) } class Apfel : public Obst { Apfel(std::string irgendWas) : Obst(Irgendwas) } registerThings() { doSomething(new Apfel("lecker")); }Weiss jemand warum das nicht klappt?
-
Weil Du einen Zeiger übergibst und kein Objekt. Das new ist an dieser Stelle unnötig, da es ein Stackobjekt genauso tun würde. Dann würde aber ein "Slicing" passieren (der Obst-Teil wird aus dem Apfel "herausgeschnitten"), weil die Funktion das Obst by-value und nicht als Referenz übernimmt.
This is not Java.
-
In dem gezeigten Code lassen sich die Objekte schon gar nicht konstruieren, weil die Konstruktoren private sind.
-
Das ist schon alles public.... ich habe den kopf aus dem kopf geschrieben und habe das schon Public gemacht

Danke @LordJaxon es funktioniert wenn ich ein stackobject mache
allerdings hätte ich da eine frage wie ich den Code noch "verkürzen könnte"
Bis jetzt müsste ich ja jedes "obst" so defenieren
void registerThings() { Apfel apfel("lecker"); Banane banane("lecker"); Orange orange("lecker"); Melone melone("lecker"); registerThing(apfel); registerThing(banane); registerThing(orange); registerThing(melone); } void registerThing() { ... }gäbe es da nicht eine alternative?
-
registerThing(Apfel{"lecker"});Vergiss das mit dem slicing nicht. doSomething sollte jetzt so
doSomething (const Obst& obst);aussehen.