1.dynamic_cast
class Grand { // has virtual methods };
class Superb: public Grand { . . . };
class Magnificent : public Superb { . . . };
Grand * pg = new Grand;
Grand * ps = new Superb;
Grand * pm = new Magnificent;
Superb * pm = dynamic_cast<Superb* > (pg);
通常,如果指向的对象(*pt) 的类型为Type或者是从Type直接或间接派生而来的类型,则下面的表达式将指针pt转换为Type类型的指针:
dynamic_cast<Type *> ( pt )
否则,结果为0,即空指针。
643页
也可以将 dynamic_cast 用于引用,其用法稍微有点不同:没有与空指针对应的引用值,因此无法使用特殊的引用值来指示失败。当请求不正确时,dynamic_cast 将引发类型为 bad_cast 的异常,这种异常是从exception 类派生而来的,它是在头文件typeinfo 中定义的。因此可以像下面这样使用该运算符,其中 rg 是对Grand对象的引用;
#include <typeinfo> // for bad_cast
. . .
try {
Superb & rs = dynamic_cast<Superb& > ( rg ) ;
. . .
}
catch(bad_cast & ){
. . .
};
2.
转发至微博
转发至微博