RTTI(Run-Time Type Identification),通过运行时类型信息程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型。
RTTI介绍
RTTI提供了以下两个非常有用的操作符:
(1)typeid操作符,返回指针和引用所指的实际类型。
(2)dynamic_cast操作符,将基类类型的指针或引用安全地转换为派生类型的指针或引用。
//面试,RTTI实时类型检测
//主要依赖typeid, dynamic_cast
//类型不匹配转失败,返回为空,保证类型安全
1 #include <iostream> 2 3 //面试,RTTI实时类型检测 4 //主要依赖typeid, dynamic_cast 5 //类型不匹配转失败,返回为空,保证类型安全 6 7 class A 8 { 9 public: 10 int num; 11 static int data; 12 virtual void run()//虚函数 13 { 14 std::cout << "Arun" << std::endl; 15 } 16 }; 17 18 class B :public A 19 { 20 public: 21 int num; 22 static int data; 23 virtual void run()//虚函数 24 { 25 std::cout << "Brun" << std::endl; 26 } 27 void test() 28 { 29 std::cout << "Btest" << std::endl; 30 } 31 }; 32 33 int A::data = 1; 34 int B::data = 2; 35 36 void main() 37 { 38 A a1; 39 B b1; 40 41 A *p1 = &a1;//直接用基类指针引用基类对象 42 A *p2 = &b1;//用基类指针引用一个派生类对象 43 B *p3(nullptr);//派生类指针,为空 44 45 p3 = static_cast<B *>(p1); 46 47 p3->test(); 48 49 system("pause"); 50 }