Avatar ·

متى تستخدم static_cast و dynamic_cast و const_cast و reinterpret_cast في C++؟

مرحباً بالجميع! بدأت تعلم لغة C++ وواجهت عوامل تحويل أنواع مختلفة. أعلم أنه في لغة C يوجد تحويل بسيط بين قوسين، لكن يُقال إنه في C++ يجب استخدام عوامل خاصة: `static_cast` و `dynamic_cast` و `const_cast` و `reinterpret_cast`. أنا مرتبك تماماً بشأن متى أستخدم أياً منها. على سبيل المثال، لدي كود: ```cpp class Base { public: virtual void show() { std::cout << "Base\n"; } }; class Derived : public Base { public: void show() override { std::cout << "Derived\n"; } void extra() { std::cout << "Extra\n"; } }; int main() { Base* basePtr = new Derived(); // كيف أحول Base* إلى Derived* بشكل صحيح؟ Derived* d1 = (Derived*)basePtr; // تحويل C-style — يعمل، لكن هل هذا صحيح؟ int a = 10; double b = (double)a; // أيضاً C-style، لكن أليس هناك static_cast؟ const int x = 5; int* ptr = (int*)&x; // هل هذا const_cast؟ // وأيضاً: كيف أحصل على عنوان متغير كعدد صحيح؟