C++動態類型轉換

動態類型轉換是比靜態類型轉換更爲嚴格的一種類型轉換。

如下代碼基本數據類型無法通過動態類型轉換

    //基礎類型不可以轉換
	char c = 'a';
	//dynamic_cast非常嚴格,失去精度 或者不安全都不可以轉換
	double d = dynamic_cast<double>(c);

動態數據類型轉換隻能發生在父類和子類之間,現在就通過代碼來測試下

class Base2
{
	void func(){};
};
class Child2 :public Base2
{
	virtual void func(){};
};

父類和子類進行轉換

	Base2 * base = NULL;
	Child2 * child = NULL;

	//child轉Base2 *  安全
	Base2 * base2 = dynamic_cast<Base2*>(child);

子類和父類進行轉換

    Base2 * base = NULL;
	Child2 * child = NULL;

	//base 轉Child2 * 不安全
	Child2 * child2 = dynamic_cast<Child2*>(base);

很遺憾,以上代碼在進行編譯的時候會報錯,無法進行轉換。如果非要子類轉爲父類類型,那麼就要求子類和父類要發生多態。

父類和子類發生多態,要求2點。

第1:父類中要有虛函數

第2:子類重寫父類對應的虛函數,將子類的引用放到父類類型變量中。

明白了這點之後,我們將Base2中的func()變爲虛函數,代碼如下

class Base2
{
	virtual void func(){};
};

子類重寫func()代碼如下

class Child2 :public Base2
{
	virtual void func(){};
};

將子類的引用放到父類類型變量中

Base2 * base3 = new Child2;

現在就可以用動態類型轉換將父類類型轉爲子類類型,代碼如下

    Child2 * child3 = dynamic_cast<Child2*>(base3);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章