C++類型轉(zhuǎn)換-創(chuàng)新互聯(lián)

C語言中,存在強制類型轉(zhuǎn)換的概念。在C++中,C的做法同樣適用。但是,C++也有自己的類型轉(zhuǎn)換的方式,就是使用reinterpret_cast<>。例如,

成都創(chuàng)新互聯(lián)公司從2013年創(chuàng)立,先為亳州等服務建站,亳州等地企業(yè),進行企業(yè)商務咨詢服務。為亳州企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。
char* str = "chentong";
int* p = reinterpret_cast<int*>(str);

  通過這種方式,就把指向char*類型的str,強制轉(zhuǎn)換成了指向int*。

  僅僅這樣做,是不夠的。因為,str指向的一個字符串,一個確定的字符串,也就是說,要求是不可改寫,也就是可讀不可寫。所以,為了達到這一目的,我們將str指向的內(nèi)容不可修改。操作如下:

const char* str = "chentong";

  這樣做后,確實,str所指向的內(nèi)容不可修改了,但是,這樣做,又帶來一個問題,那就是,reinterpre_cast<>這種強制轉(zhuǎn)換,不可以去掉類似與const這樣的屬性。所以,我們要通過一些手段,將str的const屬性去掉。幸運的是,C++確實提供了解決方案。通過const_cast<>。代碼如下:

const char* str = "chentong";
char* str2 = const_cast < char* > ( str );

  這樣一來,就去掉了str的const屬性。

  那么,完整的操作方式,

const char* str = "chentong";
char* str2 = const_cast < char* > ( str );
int* p = reinterpret_cast < char* > ( str2 );

  這樣就完成了類型的轉(zhuǎn)換。

  接下來講一下動態(tài)類型轉(zhuǎn)換。首先得清楚的是,動態(tài)類型轉(zhuǎn)換,只能用于存在虛函數(shù)的類。假設我有三個類,

class Human {

public:
	 virtual void eating( void ) {

		cout << "use hand to eat" << endl;
	}
};

class Englishman : public Human {

public:
	//覆寫
	void eating(void) {

		cout << "use knife to eat" << endl;
	}
};

class Chinese : public Human {

public:
	void eating(void) {

		cout << "use chopstick to eat" << endl;
	}
};

  然后我在global space中實現(xiàn),對于不同國家的人有不同的吃飯方式這樣一個函數(shù)。

void test_eating(Human& h) {

	h.eating();
}

  現(xiàn)在,我還想分辨這個人是英國人還是中國人。那么,我該怎么做呢?

void test_eating(Human& h) {

	Englishman* pe = NULL;
	Chinese *pc = NULL;

	h.eating();
	
	if ( pe == dynamic_cast < Englishman* > ( &h ) );
	    cout << "this is Englishman" << endl;
	if ( pc == dynamic_cast < Chinese* > ( &h ) )
	    cout << "this is Chinese" << endl;
	
}

  在test_eating()函數(shù)中,我先定義兩個變量,分別指向Englishman*和Chinese類型。那么,它是如何動態(tài)轉(zhuǎn)換的呢?當一個類中有虛函數(shù)時,根據(jù)該類所創(chuàng)建的類對象中就會有一個指針,這個指針指向虛函數(shù)表,這個虛函數(shù)表中,含有類信息,根據(jù)這個類信息,就知道這個對象是屬于哪個類的。所以,這個類信息就可以確定Human& h的h,是哪個類的。

  最后,靜態(tài)類型轉(zhuǎn)換static_cast<>在進行上行轉(zhuǎn)換時,是安全的。而在下行轉(zhuǎn)換時,沒有動態(tài)的檢查,所以是不安全的,只有你編寫代碼時去檢查是否符合邏輯。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

文章標題:C++類型轉(zhuǎn)換-創(chuàng)新互聯(lián)
當前網(wǎng)址:http://www.muchs.cn/article16/cdjjgg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供關鍵詞優(yōu)化、企業(yè)網(wǎng)站制作面包屑導航、定制開發(fā)、網(wǎng)站策劃網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營