C++ में regular cast, static_cast और dynamic_cast में क्या अंतर है?
नमस्ते साथियों! मैं C++ सीख रहा हूँ और टाइप कास्टिंग में उलझ गया हूँ। ट्यूटोरियल्स में अक्सर लिखा होता है: "C-style cast से बचें", लेकिन कारण नहीं बताते। मैं एक सरल क्लास हायरार्की लिख रहा हूँ: बेस क्लास `Shape` और डिराइव्ड `Circle` और `Rectangle`। जब मैं `Shape*` पॉइंटर को `Circle*` में बदलने की कोशिश करता हूँ, तो मैं सामान्य C-style cast का उपयोग करता हूँ: `(Circle*)shape_ptr`। यह काम करता है, लेकिन कभी-कभी कंपाइलर चेतावनी देता है या प्रोग्राम क्रैश हो जाता है। फिर मैंने `static_cast` और `dynamic_cast` के बारे में जाना।
यहाँ एक उदाहरण है जो मुझे भ्रमित करता है:
```cpp
class Shape { public: virtual ~Shape() {} };
class Circle : public Shape { public: void drawCircle() { /* ... */ } };
class Rectangle : public Shape { public: void drawRect() { /* ... */ } };
void process(Shape* s) {
// विकल्प 1: C-style cast
Circle* c1 = (Circle*)s;
c1->drawCircle(); // कभी-कभी क्रैश होता है अगर s — Rectangle है
// विकल्प 2: static_cast
Circle* c2 = static_cast(s);
c2->drawCircle(); // कंपाइल होता है, लेकिन खतरनाक भी
}