C++常用的数据类型强制转换方法

dynamic_cast < type-id > ( expression )

该运算符把expression转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void *; 
dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换
class B
{
   public:   
  int m_iNum;  
  virtual void foo();  
};   
class D:public B
{   
   public:  
       char *m_szName[100];  

};  
void func(B *pb)
{   
 D *pd1 = static_cast<D *>(pb);  
 D *pd2 = dynamic_cast<D *>(pb);  
}

在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全

 

 

int main(int argc, char* argv[])
{
  
 /*
 static_cast 基本的数据类型转换
 int i=5;
 float g=34.4;
 i=static_cast<int>(g);
 cout<<i<<endl;

    static_cast 不能用于指针转换
 错误:'static_cast' : cannot convert from 'char *' to 'int *'
 */


 /*
 把空指针转换成目标类型的空指针 
 void * vp;  
 char * cp=static_cast<char *>(vp); 
 */

 /*
 reinterpret_cast主要是将数据从一种指针类型的转换为另一种指针类型。
 char *cp;
 int * ip;
 ip=reinterpret_cast<int *>(cp);
 */
 
 /*
 const_cast 去除常量指针,转换非常量指针  and 常量对象被转换成非常量对象。

 const char * const_cp;  
 char * nonconst_cp=const_cast<char *>(const_cp);
 */

 /*dynamic_cast 该运算符把expression转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void *;
 dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。
  
 */
 return 0;

}

 

posted @ 2010-12-17 15:03  稳扎稳打  Views(2411)  Comments(1Edit  收藏  举报