码迷,mamicode.com
首页 > 编程语言 > 详细

C++中的dynamic_cast和static_cast

时间:2016-05-24 13:40:20      阅读:153      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!