您好,登錄后才能下訂單哦!
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é)果:
(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é)果:
免責(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)容。