解析C++编程中的bad_cast异常
由于强制转换为引用类型失败,dynamic_cast运算符引发bad_cast异常。
语法
catch(bad_cast) statement
备注
bad_cast的接口为:
classbad_cast:publicexception{
public:
bad_cast(constchar*_Message="badcast");
bad_cast(constbad_cast&);
virtual~bad_cast();
};
以下代码包含失败的dynamic_cast引发bad_cast异常的示例。
//expre_bad_cast_Exception.cpp
//compilewith:/EHsc/GR
#include<typeinfo.h>
#include<iostream>
classShape{
public:
virtualvoidvirtualfunc()const{}
};
classCircle:publicShape{
public:
virtualvoidvirtualfunc()const{}
};
usingnamespacestd;
intmain(){
Shapeshape_instance;
Shape&ref_shape=shape_instance;
try{
Circle&ref_circle=dynamic_cast<Circle&>(ref_shape);
}
catch(bad_castb){
cout<<"Caught:"<<b.what();
}
}
由于强制转换的对象(Shape)不是派生自指定的强制转换类型(Circle),因此引发异常。若要避免此异常,请将下列声明添加到main:
Circlecircle_instance; Circle&ref_circle=circle_instance;
然后在try块中反转强制转换的意义,如下所示:
Shape&ref_shape=dynamic_cast<Shape&>(ref_circle);
热门推荐
10 对患者生日祝福语简短
11 结婚祝福语简短装备
12 周岁祝福语学生文案简短
13 订婚领证祝福语简短精辟
14 导师获奖祝福语大全简短
15 新婚购房祝福语简短精辟
16 牛年祝福语简短的爱人
17 送芒果的祝福语简短
18 送给学长毕业祝福语简短