📄 demo_type_cast_2_dynamic_cast_2.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 + -