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()
{
CGiraffegene;
CAnimal* aptr =&gene;
CGiraffe* ptr1;
CGiraffe*ptr2;
ptr1 =dynamic_cast<CGiraffe*>(aptr);
ptr2 = dynamic_cast<CGoat*>(aptr);//return NULL
return 0;
}