运行时类型识别(RTTI)功能由两个运算符实现
- typeid运算符,用于返回表达式的类型
- dynamic_cast运算符,用于将基类的指针或引用安全地转换成派生类的指针或引用
特别适用于以下情况:想用基类的指针或引用执行某个派生类的非虚函数。一般来说,只要有可能应尽量使用虚函数。
dynamic_cast
dynamic_cast<type*>(e)
dynamic_cast<type&>(e)
dynamic_cast<type&&>(e)
type与e的类型要么具有派生关系,要么类型相同。否则会转换失败。若指针类型的转换失败了,返回0。若引用类型的转换失败了,返回bad_cast异常
#include<iostream>
using namespace std;
class Base {
public:
void f();
virtual ~Base() {}
private:
int val_;
};
class Derived :public Base {
public:
void g();
virtual ~Derived() {}
};
void Base::f() {
cout << "I'm Base" << endl;
}
void Derived::g() {
cout << "I'm Derived" << endl;
}
int main() {
Base* bp = new Derived;
if (Derived* dp = dynamic_cast<Deri