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

📄 demo_type_cast_2_dynamic_cast_2.cpp

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

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

# include <iostream.h>
# include <typeinfo.h>

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

class Derived: public Base {};

void process(Base& b)
{
	//Downcast Base to Derived
	try
	{
		Derived & d=dynamic_cast<Derived &>(b);
		cout<<"Processing Derived"<<endl;
		return;
	}

	catch(bad_cast)
	{
		cout<<"NonDerived, Can't Process Derived"<<endl;
	}

	cout<<"Processing Base"<<endl;
	return;
}

int main()
{
	//Instantiate and process Base
	Base b;
	cout<<"Class Base:"<<endl;
	process(b);

	cout<<endl;

	//Instantiate and process Derived
	Derived d;
	cout<<"Class Derived:"<<endl;
	process(d);

	return 0;
}

/*
Class Base:
NonDerived, Can't Process Derived
Processing Base

Class Derived:
Processing Derived
Press any key to continue
*/

⌨️ 快捷键说明

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