Avatar ·

Was ist Objekt-Slicing in C++ und wie vermeidet man es?

Hallo! Ich lerne C++ und bin auf ein Problem gestoßen, das ich nicht verstehe. Ich habe eine Basisklasse `Shape` und eine abgeleitete Klasse `Circle`. Wenn ich ein `Circle`-Objekt an eine Funktion übergebe, die `Shape` by value nimmt, verliere ich die für `Circle` spezifischen Daten und das Verhalten. Zum Beispiel:\n\n```cpp\n#include \n#include \n\nclass Shape {\npublic:\n virtual void draw() const { std::cout << "Drawing Shape"; }\n};\n\nclass Circle : public Shape {\npublic:\n void draw() const override { std::cout << "Drawing Circle"; }\n double radius = 5.0;\n};\n\nvoid printShape(Shape s) { // Nimmt by value\n s.draw();\n // std::cout << s.radius; // Fehler! radius existiert nicht in Shape\n}\n\nint main() {\n Circle c;\n printShape(c); // Gibt "Drawing Shape" aus, nicht "Drawing Circle"\n}