zhaohangcom进来
留言留不了这么长,所以发在这里了。
--------------------------------------------------------
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。前者让你能够在继承体系中安全的上下转型,而后者更可以让你在运行时获得某个类的相关信息。更详细的知识应该去看书。我这里不可能为你详解。