高分向求:数据类型转换:static_cast,const_cast等用法
c++ primer 4.14节提到c++数据类型转换;显示转换符号的一般形势为:
cast-name<type> (expression);
这里cast-name是static_cast,const_cast,dynamic_cast,reinterpret_cast之一。
问题:1。这四个分别有什么作用,区别是什么,都分别用在什么场合??
2。这种显示类型转换和c下的有什么区别??
问题点数:50、回复次数:2Top
1 楼zhousqy(标准C匪徒)(甩拉,甩拉)回复于 2005-06-21 21:40:28 得分 40
* 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;
}
---------------------------------------------------------------
以上纯属以前帖子的copy。Top
2 楼foochow(无聊,灌水......)回复于 2005-06-21 22:10:54 得分 10
上面的差不多说的很清楚了:PTop




