C++提供了四種新的類型轉換

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;
} 



發佈了24 篇原創文章 · 獲贊 4 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章