static_cast: 일반/일반 유형 변환에 사용됩니다. 이것은 또한 암시적 형식 강제 변환을 담당하는 캐스트이며 명시적으로 호출할 수도 있습니다. float를 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