* C++提供了四種新的類型強(qiáng)制:
static_cast
const_cast
reinterpret_cast
dynamic_cast
1)staic_cast靜態(tài)強(qiáng)制;
不能在無(wú)關(guān)的指針之間進(jìn)行static類型強(qiáng)制
class CAnimal
{
//...
public:
CAnimal(){}
};
class CGiraffe:public CAnimal
{
//...
public:
CGiraffe(){}
};
int main(void)
{
CAnimal an;
CGiraffe jean;
an = static_cast<CAnimal>(jean);//將對(duì)象jean強(qiáng)制成CAnimal類型
return 0;
}
2、const_cast類型強(qiáng)制
const_cast類型強(qiáng)制將一個(gè)const變量變成一個(gè)非const的等價(jià)形式
int main()
{
const int j = 99;
int * k;
k = const_cast<int *>(&j);//解除const
return 0;
}
3、reinterpret_cast運(yùn)算符
reinterpret_cast運(yùn)算符用來(lái)將一個(gè)類型指針轉(zhuǎn)變?yōu)榱硪环N類型的指針,也用在將整開(kāi)型量轉(zhuǎn)為指針,或?qū)⒅羔樲D(zhuǎn)為整型量上;
int main()
{
int j = 10;
int * ptr = &j;
char * cptr;
cptr = reinterpret_cast<char *>(ptr);//將int指針類型轉(zhuǎn)變?yōu)閏har的指針類型
return 0;
}
4、dynamic_cast運(yùn)算符
dynamic_cast的主要目的是:
1)它返回派生類對(duì)象的地址;
2)它測(cè)試基類指針是否指向下一尖括號(hào)<>中所指定類型的對(duì)象
dynamic_cast是一個(gè)運(yùn)行時(shí)類型信息,dynamic_cast運(yùn)算符將指向派生對(duì)象的基類部分的基類指針轉(zhuǎn)變?yōu)橹赶蚺缮鷮?duì)象的派生類指針,dynamic_cast必須嚴(yán)格地指定與派生對(duì)象相同的類,或者它返回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;
}