Avatar ·

Was ist der Unterschied zwischen regular cast, static_cast und dynamic_cast in C++?

Hallo Kollegen! Ich lerne C++ und bin bei den Typumwandlungen verwirrt. In Lehrbüchern steht oft: "Vermeiden Sie C-style cast", aber es wird nicht erklärt, warum. Ich schreibe eine einfache Klassenhierarchie: Es gibt eine Basisklasse `Shape` und abgeleitete Klassen `Circle` und `Rectangle`. Wenn ich versuche, einen Zeiger auf `Shape*` in `Circle*` umzuwandeln, verwende ich den normalen C-style cast: `(Circle*)shape_ptr`. Es scheint zu funktionieren, aber der Compiler meckert manchmal oder das Programm stürzt ab. Dann habe ich von `static_cast` und `dynamic_cast` erfahren. Hier ist ein Beispiel, das mich verwirrt: ```cpp class Shape { public: virtual ~Shape() {} }; class Circle : public Shape { public: void drawCircle() { /* ... */ } }; class Rectangle : public Shape { public: void drawRect() { /* ... */ } }; void process(Shape* s) { // Variante 1: C-style cast Circle* c1 = (Cir