RTTI 2011.04.13
来源:互联网 发布:c语言从入门到放弃pdf 编辑:程序博客网 时间:2024/06/07 14:02
RTTI(Run-Time Type Identification,通过运行时类型识别)程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型。RTTI提供了以下两个非常有用的操作符: (1)typeid操作符,返回指针和引用所指的实际类型; (2)dynamic_cast操作符,将基类类型的指针或引用安全地转换为派生类型的指针或引用。
例:
#include <iostream>
using namespace std;
#include <typeinfo>
class A{};
class B : public A{};
class C
{
public:
virtual void f(){}
};
class D : public C{};
int main()
{
const type_info& t1 = typeid(int);
const type_info& t2 = typeid(5);
cout<<t1.name()<<endl;
cout<<(t1 == t2)<<endl;
cout<<(t1 == typeid(5.0))<<endl;
cout<<"---------------------------------------------------------------"<<endl;
A* p1 = new A;
A* p2 = new B;
C* q1 = new C;
C* q2 = new D;
cout<<typeid(*p1).name()<<endl;
cout<<typeid(*p2).name()<<endl;
cout<<typeid(*q1).name()<<endl;
cout<<typeid(*q2).name()<<endl;
cout<<typeid(*q1).before(typeid(*q2))<<endl;
cout<<typeid(*p1).before(typeid(*p2))<<endl;
cout<<"-----------------------------------------------------------------"<<endl;
if (dynamic_cast<D*>(q2) == NULL)
{
cout<<"q2所指对象不是D类型的"<<endl;
}
else
{
cout<<"q2所指对象是D类型的"<<endl;
}
if (dynamic_cast<D*>(q1) == NULL)
{
cout<<"q1所指对象不是D类型的"<<endl;
}
else
{
cout<<"q1所指对象是D类型的"<<endl;
}
delete p1;
delete p2;
delete q1;
delete q2;
return 0;
}
输出:
int
1
0
---------------------------------------------------------------
class A
class A
class C
class D
1
0
-----------------------------------------------------------------
q2所指对象是D类型的
q1所指对象不是D类型的
- RTTI 2011.04.13
- RTTI
- RTTI
- rtti
- RTTI
- RTTI
- RTTI
- RTTI
- RTTI
- RTTI
- RTTI
- RTTI
- RTTI
- RTTI
- RTTI
- RTTI
- RTTI
- RTTI
- Iphone利用JSON传递数据,展示在Table界面中
- 浅析JavaScript继承方式
- javascript自动调整iframe高度
- 按位与运算和按位或运算对精度的影响
- 电信业务分类目录
- RTTI 2011.04.13
- UITableView实现自定义布局
- jQuery获取Select选择的Text和Value
- 程序员从初级到中级10个秘诀
- 使用 Bigtable、Blobstore 和 Google Storage 实现 GAE 存储
- 表视图实现的一些效果和处理行的选择
- wince下解析域名失败
- Windows 7远程桌面 重启 关机 任务管理器 命令
- iphone实现NavigationController 导航栏中的系统按钮