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