静态和动态类型转换区别就是动态类型转换在下行转换时进行类型检查,是安全的,动态不支持基础类型转换
#include<iostream>
using namespace std;
class parent
{
public:
virtual void Print_parent()
{
cout << "I am parent" << endl;
}
};
class son:public parent
{
public:
void Print_parent()
{
cout << "I am son" << endl;
}
};
void test_static()
{
//普通类型转换
int a = 10;
double b = static_cast<double>(a);
//上行转换和下行转换
parent* par = NULL;
son* so = NULL;
parent* par2 = static_cast<parent*>(so);//子类转父类,安全
son* so2 = static_cast<son*>(par);//父类转子类,静态转换没有进行安全类型检查,不安全
}
void test_dynamic()
{
//普通类型转换
int a = 10;
//double b = dynamic_cast<double>(a);
//上行转换和下行转换
parent* par = NULL;
son* so = NULL;
parent* par2 = dynamic_cast<parent*>(so);//子类转父类,安全(上)
//在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全(下)
//son* so2 = dynamic_cast<son*>(par);//父类转子类,不安全,动态类型会进行安全检查,编译不通过
son* s = new son;
parent* p = dynamic_cast<parent*>(s);
}
int main()
{
//test_static();
test_dynamic();
system("pause");
}