首页 > 编程语言 > 详细

C++中的dynamic_cast和static_cast

时间:2016-05-24 13:37:19      阅读:221      评论:0      收藏:0      [点我收藏+]

代码:

 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则没有这个要求,但在无关类指针转换时,编译器会报错,提升了安全性。

C++中的dynamic_cast和static_cast

原文:http://www.cnblogs.com/hu983/p/5522952.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!