C++提供了四种新的类型强制

static_cast
const_cast
reinterpret_cast
dynamic_cast

1)staic_cast静态强制;


不能在无关的指针之间进行static类型强制
class   CAnimal 
{ 
  //... 
  public: 
  CAnimal(){} 
}; 

class   CGiraffe:public   CAnimal 
{ 
  //... 
  public: 
  CGiraffe(){} 
}; 

int   main(void) 
{ 
  CAnimal   an; 
  CGiraffe   jean; 

  an   =   static_cast <CAnimal> (jean);//将对象jean强制成CAnimal类型 
  return   0; 
} 


2、const_cast类型强制

const_cast类型强制将一个const变量变成一个非const的等价形式


int   main() 
{ 
  const   int   j   =   99; 
  int   *   k; 

  k   =   const_cast <int   *> (&j);//解除const 
  return   0; 
} 


3、reinterpret_cast运算符

reinterpret_cast运算符用来将一个类型指针转变为另一种类型的指针,也用在将整开型量转为指针,或将指针转为整型量上;

int   main() 
{ 
   int   j   =   10; 
   int   *   ptr   =   &j; 
   char   *   cptr; 

   cptr   =   reinterpret_cast <char   *> (ptr);
     //将int指针类型转变为   char的指针类型 
    return   0; 
} 


4、dynamic_cast运算符

dynamic_cast的主要目的是:

1)它返回派生类对象的地址;
2)它测试基类指针是否指向下一尖括号 <> 中所指定类型的对象

dynamic_cast是一个运行时类型信息,dynamic_cast运算符将指向派生对象的基类部分的基类指针转变为指向派生对象的派生类指针,dynamic_cast必须严格地指定与派生对象相同的类,或者它返回NULL指针;
class   CAnimal 
{ 
  //... 
}; 
class   CGiraffe:public   CAnimal 
{ 
  //... 
}; 
class   CGoat:public   CAnimal 
{ 
  //... 
}; 

int   main() 
{ 
   CGiraffe   gene; 
   CAnimal   *   aptr   =   &gene; 
   CGiraffe   *   ptr1,*   ptr2; 

   ptr1   =   dynamic_cast <CGiraffe   *> (aptr); 
   ptr2   =   dynamic_cast <CGoat   *> (aptr); //return   NULL 

   return   0; 
} 
 
 

  

你可能感兴趣的:(C++,c,C#,J#)