1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#include <iostream>
using
namespace
std;
#include <typeinfo>
class
A{
public
:
virtual
void
foo(
void
){}
};
class
B:
public
A{
void
foo(
void
){}
};
class
C:
public
A{
void
foo(
void
){}
};
int
main(
void
){
B b;
A* pa= &b;
B* pb =
dynamic_cast
<B*>(pa);
//pa是指向B类型的基类指针,OK
//C* pc = dynamic_cast<B*>(pa); //pa不是指向C类型的基类指针,error
B b1;
A& ra = b1;
B& b2 =
dynamic_cast
<B&>(ra);
//C& c1 = dynamic_cast<C&>(ra);error
return
0;
}
上面两个错误都是,编译时不报错,运行时报错.
dynamic_cast
主要是将指向子类的基类指针转化为子类的指针
转换过程中会检查目标和期望转换的对象是否一致,一致转换
成功,否则失败,如果转换为指针,则失败返回NULL,如果是引用失败
返回bad_cast异常
|
本文转自神ge 51CTO博客,原文链接:http://blog.51cto.com/12218412/1868772