static_cast: এটি সাধারণ/সাধারণ টাইপ রূপান্তরের জন্য ব্যবহৃত হয়। এটি অন্তর্নিহিত টাইপ কোরশনের জন্য দায়ী কাস্ট এবং এটিকে স্পষ্টভাবে বলা যেতে পারে। আপনার এটি ব্যবহার করা উচিত যেমন ফ্লোটকে int, char থেকে int, ইত্যাদিতে রূপান্তর করা। এটি সম্পর্কিত টাইপ ক্লাস কাস্ট করতে পারে। যদি প্রকারগুলি একই না হয় তবে এটি কিছু ত্রুটি তৈরি করবে৷
উদাহরণ
#include<iostream> using namespace std; class Base {}; class Derived : public Base {}; class MyClass {}; main(){ Derived* d = new Derived; Base* b = static_cast<Base*>(d); // this line will work properly MyClass* x = static_cast<MyClass*>(d); // ERROR will be generated during compilation }
আউটপুট
[Error] invalid static_cast from type 'Derived*' to type 'MyClass*'
ডাইনামিক_কাস্ট :এই ঢালাই পলিমারফিজম পরিচালনার জন্য ব্যবহৃত হয়। আপনি যখন একটি উদ্ভূত ক্লাসে কাস্ট করছেন তখনই আপনাকে এটি ব্যবহার করতে হবে। আপনি যখন বেস ক্লাস থেকে ডেরাইভড ক্লাসে কাস্ট করেন তখন এটি একচেটিয়াভাবে উত্তরাধিকারে ব্যবহার করা হয়।
উদাহরণ
#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); //This cast will be failed if (b) b->print(); else cout << "no MyClass2\n"; a = c; a -> print(); //Printing from MyClass3 b = dynamic_cast< MyClass2*>(a); //Successfully casting is done 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