কম্পিউটার টিউটোরিয়াল

সি++-এ dynamic_cast এবং static_cast


static_cast: এটি সাধারণ/সাধারণ টাইপ কনভার্সনের জন্য ব্যবহৃত হয়। এটি ইমপ্লিসিট টাইপ কোয়ার্সনের (implicit type coercion) জন্য দায়ী এবং এক্সপ্লিসিটলিও কল করা যায়। আপনি इसे কেসগুলোতে ব্যবহার করবেন যেমন float থেকে int, char থেকে int ইত্যাদি। এটি সম্পর্কিত টাইপ ক্লাস কাস্ট করতে পারে। যদি টাইপগুলো একই না হয়, তবে এরর জেনারেট হবে।

উদাহরণ

#include <iostream>
using namespace std;

class Base {};
class Derived : public Base {};
class MyClass {};

int main() {
    Derived* d = new Derived;
    Base* b = static_cast<Base*>(d); // এই লাইনটি সঠিকভাবে কাজ করবে
    MyClass* x = static_cast<MyClass*>(d); // কম্পাইলেশন এরর জেনারেট হবে
}

আউটপুট

[Error] invalid static_cast from type 'Derived*' to type 'MyClass*'

dynamic_cast: এই কাস্টটি পলিমরফিজম হ্যান্ডল করার জন্য ব্যবহৃত হয়। আপনাকে এটি শুধু তখনই ব্যবহার করতে হবে যখন আপনি একটি ডেরাইভড ক্লাসে কাস্ট করছেন। এটি এক্সক্লूसিভলি ইনহেরিটেন্সে ব্যবহার করা হয় যখন আপনি বেস ক্লাস থেকে ডেরাইভড ক্লাসে কাস্ট করেন।

উদাহরণ

#include <iostream>
using namespace std;

class MyClass1 {
public:
    virtual void print() const {
        cout << "This is from MyClass1\n";
    }
};

class MyClass2 {
public:
    virtual void print() const {
        cout << "This is from MyClass2\n";
    }
};

class MyClass3 : public MyClass1, public MyClass2 {
public:
    void print() const {
        cout << "This is from MyClass3\n";
    }
};

int main() {
    MyClass1* a = new MyClass1;
    MyClass2* b = new MyClass2;
    MyClass3* c = new MyClass3;
    a->print();
    b->print();
    c->print();
    b = dynamic_cast<MyClass2*>(a); // এই কাস্ট ফেল হবে
    if (b)
        b->print();
    else
        cout << "no MyClass2\n";
    a = c;
    a->print(); // MyClass3 থেকে প্রিন্ট
    b = dynamic_cast<MyClass2*>(a); // সফল কাস্ট
    if (b)
        b->print();
    else
        cout << "no MyClass2\n";
}

আউটপুট

This is from MyClass1
This is from MyClass2
This is from MyClass3
no MyClass2
This is from MyClass3
This is from MyClass3
  1. C++-এ ক্লাস এবং অবজেক্ট

  2. C++-এ রেগুলার কাস্ট vs static_cast vs dynamic_cast পার্থক্য

  3. C++-এ static_cast, dynamic_cast, const_cast, reinterpret_cast কখন ব্যবহার করবেন?

  4. C++-এ ফ্রেন্ড ক্লাস এবং ফাংশন