数据类型转换:static_cast,const_cast等用法(转载)
2015-10-12 10:44
429 查看
数据类型转换:static_cast,const_cast等用法(转载)
* 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++提供了四种新的类型强制:
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;
}
相关文章推荐
- Android_Handler机制
- 多路Binding
- Oracle 官网 jdk1.6 下载地址
- Java常见错误列表
- Qualcomm MSM Camera Dtsi documentation
- 迁移 VMware 虚拟机到 KVM
- 从后端到页面:如何全方位监控 Ruby 应用?
- 架构设计:系统间通信(7)——IO通信模型和Netty 下篇
- Java API中英文档、Android API中文文档资料下载
- dubbo拆分项目是遇到的异常
- nginx源码分析--使用GDB调试(strace、 pstack )
- java设计模式3种工厂模式
- Codeforces Round #200 (Div. 1)A. Rational Resistance 数学
- Android 内存监测工具 DDMS --> Heap
- 循环处理--sqlserver
- 函数指针
- SpatialLite使用
- 单色三角形问题结论
- spring mvc controller接收请求值及controller之间跳转及传值
- MyEclipse破解激活工具