C++ 補充 & C++ 11 - C++ dynamic_cast用法詳解

dynamic_cast

動態類型轉換

將一個基類對象指針cast到繼承類指針,dynamic_cast 會根據基類指針是否真正指向繼承類指針來做相應處理。失敗返回null,成功返回正常cast後的對象指針;

將一個基類對象引用cast 繼承類對象,dynamic_cast 會根據基類對象是否真正屬於繼承類來做相應處理。失敗拋出異常bad_cast
注意:dynamic_cast在將父類cast到子類時,父類必須要有虛函數一起玩。

demo 代碼(一)

#include <iostream>

using namespace std;

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

};

class Cat : public Animal
{
public:
	void cry()
	{
		cout << "喵喵" << endl;
	}

	void play()
	{
		cout << "爬樹" << endl;
	}
};

class Dog :public Animal
{
public:
	void cry()
	{
		cout << "旺旺" << endl;
	}

	void play()
	{
		cout << "溜達溜達" << endl;
	}
};

void animalPlay(Animal* animal)
{
	animal->cry();

	Dog* pDog = dynamic_cast<Dog*>(animal);
	if (pDog)
	{
		pDog->play();
	}
	else /* pDog == NULL */
	{
		cout << "不是狗, 別騙我!" << endl;
	}

	Cat* pCat = dynamic_cast<Cat*>(animal);
	if (pCat)
	{
		pCat->play();
	}
	else /* pDog == NULL */
	{
		cout << "不是貓, 別騙我!" << endl;
	}

}

int main(void)
{
	Dog* dog1 = new Dog();
	Animal* a1 = dog1;

	//animalPlay(a1);
	
	Dog dog2;
	animalPlay(dog2);

	Cat* cat1 = new Cat();
	Animal* a2 = cat1;

	//animalPlay(a2);
	Cat cat2;
	animalPlay(cat2);

	system("pause");
	return 0;
}

結語:

時間: 2020-07-02

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