数据类型转换(static_cast, const_cast ,reinterpret_cast ,dynamic_cast )

来源:互联网 发布:关闭多台linux系统脚本 编辑:程序博客网 时间:2024/05/01 01:33
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; 

原创粉丝点击