51CTO技术论坛_中国领先的IT技术社区's Archiver

感冒不好玩 发表于 2006-8-29 01:49

C++的数据类型转换关键字dynamic_cast

在使用C++编程时,经常要用到不同数据类型之间的类型转换,可能大家对C语言的类型强制转换比较熟悉,就是在表达时前面加一个“(强制转换类型)”。在C++中仍然可以用C方式的对不同类之间数据类型转换,但是,C++提供了更好的数据类型转换方式,就是利用关键字“dynamic_cast”来完成对不同类之间数据类型之间的转换。c;X7L@ a_P-X4}-c
3[0QnJDF}
dynamic_cast的使用格式是:i \,z+a6a%x0Z6c
b#J!\#N9{a,I`
dynamic_cast  (ptr)6K4{J/|g5@!|8q

#c+_7M.Z1|5xu6a$\ 其中,T必须是一个类的的指针或引用,也可以是 void *,参数ptr必须是一个能得到一个指针或者引用的表达式。
5tfe'Hl_]9E7o N
3J6]F_7| j gTU 如果T是 void * ,那么 ptr 必须是一个指针,而不能是一个引用。X)Y~jR%qi^%_

)|7M%]t h 如果转换成功,dynamic_cast  (ptr) 将把ptr转换成你想要转换的类型,如果不成功,返回0(NULL),如果转换到一个引用类型失败,将会触发一个“Bad_cast exception”异常。+h \ B`YSC!TwCtU
GbBX {OYu;A sq
下面的代码是dynamic_cast的实例代码:
Rx4L"V!ox
QkN8N?/@ f(f   
s Rv5VkDN_ // HOW TO MAKE DYNAMIC CASTS   S @c [(Q_
   
9u4x$e6H&CjK.c9@ // 这个程序必须用 -RT 选项编译  
&lV+i}-?c~ #include   
R qQ q~rI;s;TZ #include    q4F"v0I A0M'm3m
   O~y,U-Ir7N
class Base1    U GZ UI)f j
{   :|Y;h$s4oi9[R)}&R0F
   virtual void f(void) {  }   
G6G$f'B _ };   
a$|Y+J Blk7h    
#OAH(Qn$_d\ iz class Base2 { };   
8xALQ2H)D0S class Derived : public Base1, public Base2 { };   
y3@&Xn*e    {+l h vF!Ft*}y,^
int main(void) {   
#t}({ZZ#~;SO8G    try {   #iA Cg%^ ]J
      Derived d, *pd;   
!f"jQ+iUJ       Base1 *b1 = &d;   
$Q5g{l$`Q O r,[U2S    
2B4\{enI       if ((pd = dynamic_cast(b1)) != 0) {   
Vr H6uRAQ5b7@~2Yq            std::cout (b1)) != 0) {   1YH&j]+N2Qd
          cout (Components[i]))
m(x-L"V9a6X]S$u          p->Open(); iE0sI K'S-A x1W
} v2eaNF'Way
//---------------------------------------------------------------------------

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.