C++中的dynamic_cast和static_cast

代码:

 1 #include <cstdio>
 2 #include <iostream>
 3 
 4 using namespace std;
 5 
 6 class A{
 7     public:
 8         virtual void print(){
 9             cout<<"i am A"<<endl;
10         }
11 };
12 
13 class B:public A{
14     public:
15 };
16 
17 int main(){
18 
19     A a;
20     B b;
21     A* pA = dynamic_cast<A*>(&b);
22     B* pB = dynamic_cast<B*>(&a);//会出现警告
23     cout<<pB<<endl;
24     pB = static_cast<B*>(&a);
25     cout<<pB<<endl;
26     pB->print();
27     
28     return 0;
29 }

输出:

0
0x7fff4f697300
i am A

 分析:

dynamic_cast下行转换(基类到子类)时要求基类是多态的,如果发现下行转换不安全,dynamic_cast返回一个null指针;

static_cast则没有这个要求,但在无关类指针转换时,编译器会报错,提升了安全性。

posted @ 2016-05-24 12:00  hu983  阅读(272)  评论(0编辑  收藏  举报