⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demo_type_cast_2_dynamic_cast_1.cpp

📁 对于一个初涉VC++的人来书
💻 CPP
字号:

//***************************************************
// dynamic_cast 多态强制类型转换
// 多态时对指针或引用进行向下强制类型转换
//***************************************************
// 只有多态情况下,才允许基类指针转换为派生类指针,
// 但转换成功的条件是: 基类指针指向派生类对象.
//***************************************************

# include <iostream.h>

class Shape
{
public:
	virtual void foo() {} //只有当基类至少有一个虚函数时才可用RTTI
};

class Circle: public Shape {};
class Rectangle: public Shape {};

void process(Shape* sp)
{
	//Downcast Shape* to Circle*
	Circle* cp=dynamic_cast<Circle*>(sp); //转换成功时返回值为真
	if(cp)
	{
		cout<<"Processing a Circle"<<endl;
		return;
	}

	//Downcast Shape* to Rectangle*
	Rectangle* rp=dynamic_cast<Rectangle*>(sp);
	if(rp)
	{
		cout<<"Processing a Rectangle"<<endl;
		return;
	}

	cout<<"Processing a Shape"<<endl;
}

int main()
{
	//Instantiate and process a Circle
	Circle circle;
	process(&circle);

	//Instantiate and process a Rectangle
	Rectangle rectangle;
	process(&rectangle);

	//Instantiate and process a Shape
	Shape shape;
	process(&shape);

	return 0;
}

/*
Processing a Circle
Processing a Rectangle
Processing a Shape
Press any key to continue
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -