Avatar ·

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(); // कंपाइल होता है, लेकिन खतरनाक भी }