zhaohangcom进来

TopCat 2003-03-05 01:55:11
留言留不了这么长,所以发在这里了。
--------------------------------------------------------
RTTI实际就是一种动态获得类的信息的能力。举个简单的例子:
class Base{
public:
virtual void Draw() {cout << "Base::Draw" << endl;};
};

class Derived : public Base{
public:
virtual void Draw() {cout << "Derived::Draw" << endl;};
virtual void MyOwnFunc() {cout << "MyOwnFunc" << endl;};
};

void DrawClass(const Base &c)
{
c.Draw();
}
Base base;
Derived derived;

我们调用DrawClass(derived)会输出什么?没错,是Derived::Draw,这是就是多型,编译器会自动产生一个"up cast",注意是自动的。但是,如果在函数DrawClass里写这样的语句:c.MyOwnFunc(); 又会怎样?编译通不过。因为Base类里根本没有MyOwnFunc这个方法。但是我如果调用DrawClass(derived)的话,derived确实是有这个方法的啊!这时,我们就需要一种“运行时动态判断某个实例究竟是什么类”这样的一种能力。这个能力就叫RTTI。在C++里,有两个关键字用来支持RTTI能力:
dynamic_cast和type_info。前者让你能够在继承体系中安全的上下转型,而后者更可以让你在运行时获得某个类的相关信息。更详细的知识应该去看书。我这里不可能为你详解。
...全文
29 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
TopCat 2003-03-05
  • 打赏
  • 举报
回复
“怎么用”这个问题太大了。你能不能先看看书?如果有更加具体的问题我比较好回答些。
zhaohangcom 2003-03-05
  • 打赏
  • 举报
回复
谢谢了^_^。
dynamic_cast和type_info 具体怎么使用啊,能不能举个例子。(最好是例子能比较全面的体现他们的功能)

69,322

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧