您当前的位置: 首页 >  c++

phymat.nico

暂无认证

  • 7浏览

    0关注

    1967博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++类型转换: static_cast const_cast reinterpret_cast dynamic_cast

phymat.nico 发布时间:2015-01-27 09:28:47 ,浏览量:7

* 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(jean);//将对象jean强制成CAnimal类型 
return 0; 
} 

2、const_cast类型强制 

const_cast类型强制将一个const变量变成一个非const的等价形式 
int main() 
{ 
const int j = 99; 
int * k; 

k = const_cast(&j);//解除const 
return 0; 
} 

3、reinterpret_cast运算符 

reinterpret_cast运算符用来将一个类型指针转变为另一种类型的指针,也用在将整开型量转为指针,或将指针转为整型量上; 
int main() 
{ 
int j = 10; 
int * ptr = &j; 
char * cptr; 

cptr = reinterpret_cast(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(aptr); 
ptr2 = dynamic_cast(aptr); //return NULL 

return 0; 
}
关注
打赏
1659628745
查看更多评论
立即登录/注册

微信扫码登录

0.0524s