溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C++中四種類型裝換

發(fā)布時(shí)間:2020-06-18 19:32:11 來源:網(wǎng)絡(luò) 閱讀:676 作者:匯天下豪杰 欄目:編程語言

1、類型轉(zhuǎn)換

  static_cast<>():靜態(tài)類型轉(zhuǎn)換,編譯時(shí)C++編譯器會(huì)做類型檢查,在C語言中,隱式類型轉(zhuǎn)換的地方,均可以使用static_cast<>()進(jìn)行類型轉(zhuǎn)換;

  reinterpret_cast<>():強(qiáng)制類型轉(zhuǎn)換;編譯器重新解釋;

  dynamic_cast<Cat *>(base):父類對(duì)象===>子類對(duì)象,向下轉(zhuǎn)型,一般用在繼承中;

  const_cast<>():const char *---> char *,把常量屬性去掉;

(1)、代碼如下:

#include<iostream>
using namespace std;

class Animal{
    public:
        virtual void cry() = 0;
};

class Dog : public Animal{
    public:
        virtual void cry(){
            cout<<"汪王"<<endl;
        }   
        void doHome(){
            cout<<"看家"<<endl;
        }   
    private:

};

class Cat : public Animal{
    public:
    virtual void cry(){
        cout<<"喵喵"<<endl;
    }   
    void doThing(){
        cout<<"抓老鼠"<<endl;
    }
    private:
};

void playObj(Animal *base){
    base->cry();   //1、有繼承 2、有虛函數(shù)的重寫 3、有父類指針指向子類對(duì)象; ===>發(fā)生多態(tài)
    //dynamic_cast能識(shí)別子類對(duì)象,運(yùn)行時(shí)類型識(shí)別;
    Dog *pDog = dynamic_cast<Dog *>(base);  //是自己類型的,將轉(zhuǎn)換成功,否則返回為NULL;
    if(pDog){
        pDog->doHome();   //讓狗做自己特有的工作;
    }
    Cat *pCat = dynamic_cast<Cat *>(base);//父類對(duì)象===>子類對(duì)象,向下轉(zhuǎn)型;
    if(pCat){
        pCat->doThing();   //讓貓做自己特有的工作;
    }
}

int main(void){
    Dog d1;
    Cat c1;

    playObj(&d1);
    playObj(&c1);

    //Animal *base = NULL;     
    //base = static_cast<Animal *>(&d1);

    return 0;
}
/*
int main(void){
    double pi = 3.14;

    int num2 = static_cast<int>(pi); //靜態(tài)類型轉(zhuǎn)換,編譯時(shí)C++編譯器會(huì)做類型檢查,在C語言中,隱式類型轉(zhuǎn)換
的地方,均可以使用static_cast<>()進(jìn)行類型轉(zhuǎn)換;

    char *p1 = "abcdef";
    int *p2 = NULL;
    //p2 = static_cast<int*>(p1); //使用static_cast,編譯器編譯時(shí),會(huì)做類型檢查,若有錯(cuò)誤,提示錯(cuò)誤;
    p2 = reinterpret_cast<int *>(p1);// 強(qiáng)制類型轉(zhuǎn)換;編譯器重新解釋
    cout<<p1<<endl;
    cout<<p2<<endl; //%d

    return 0;
}

*/

運(yùn)行結(jié)果:

C++中四種類型裝換


(2)、針對(duì)const_cast<char *>(p)的類型轉(zhuǎn)換代碼:

#include<iostream>
using namespace std;

void printBuf(const char *p){
    //p[1] = '1';
    char *p1 = NULL;
    p1 = const_cast<char *>(p);//const char *---> char *,把常量屬性去掉;
    p1[0] = 'Z';
    cout<<p<<endl;
}

int main(void){
    const char buf[] = "abcdefg";
    //程序員要確保p所指向的空間確實(shí)能修改,如果不能修改將會(huì)帶來災(zāi)難性的后果;
    //const char *buf = "abcdef";//會(huì)發(fā)生斷錯(cuò)誤;因?yàn)槠渌赶虻目臻g本身不可修改
    printBuf(buf);

    return 0;
}

運(yùn)行結(jié)果:

C++中四種類型裝換




向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI