static_cast: Điều này được sử dụng để chuyển đổi loại bình thường / bình thường. Đây cũng là bộ ép kiểu chịu trách nhiệm về ép kiểu ngầm định và cũng có thể được gọi một cách rõ ràng. Bạn nên sử dụng nó trong các trường hợp như chuyển đổi float thành int, char thành int, v.v. Điều này có thể ép kiểu các lớp liên quan. Nếu các loại không giống nhau, nó sẽ tạo ra một số lỗi.
Ví dụ
#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 }
Đầu ra
[Error] invalid static_cast from type 'Derived*' to type 'MyClass*'
dynamic_cast :Cast này được sử dụng để xử lý đa hình. Bạn chỉ cần sử dụng nó khi truyền tới một lớp dẫn xuất. Điều này chỉ được sử dụng trong kế thừa khi bạn truyền từ lớp cơ sở sang lớp dẫn xuất.
Ví dụ
#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"; }
Đầu ra
This is from MyClass1 This is from MyClass2 This is from MyClass3 no MyClass2 This is from MyClass3 This is from MyClass3