متى تستخدم 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؟
// وأيضاً: كيف أحصل على عنوان متغير كعدد صحيح؟