C++中的dynamic_cast和static_cast
2016-05-24 12:00
405 查看
代码:
输出:
分析:
dynamic_cast下行转换(基类到子类)时要求基类是多态的,如果发现下行转换不安全,dynamic_cast返回一个null指针;
static_cast则没有这个要求,但在无关类指针转换时,编译器会报错,提升了安全性。
#include <cstdio> #include <iostream> using namespace std; class A{ public: virtual void print(){ cout<<"i am A"<<endl; } }; class B:public A{ public: }; int main(){ A a; B b; A* pA = dynamic_cast<A*>(&b); B* pB = dynamic_cast<B*>(&a);//会出现警告 cout<<pB<<endl; pB = static_cast<B*>(&a); cout<<pB<<endl; pB->print(); return 0; }
输出:
0 0x7fff4f697300 i am A
分析:
dynamic_cast下行转换(基类到子类)时要求基类是多态的,如果发现下行转换不安全,dynamic_cast返回一个null指针;
static_cast则没有这个要求,但在无关类指针转换时,编译器会报错,提升了安全性。
相关文章推荐