//涓閬撶瑪璇曢
//鑰冨療RTTI鐨勫熀鏈煡璇嗭紝 榪愯鏃剁被鍨嬭瘑鍒?br>//榪樿鎵撳紑VC緙栬瘧鍣ㄧ殑RTTI鍔熻兘
//Project / Settings/ C/C++ /Catogory閫塁++ language灝辯湅鍒伴偅涓夐」浜?br>#include <iostream>
#include <typeinfo>
using namespace std;
class base
{
public:
virtual void funcA() {cout << "base" << endl;}
};
class derived : public base
{
public:
virtual void funcB() {cout << "derived" << endl;}
};
//瑕佹眰func鑳藉杈撳嚭褰㈠弬鐨勭湡瀹炵被鍨嬶紝涓嬮潰涓や釜func閮藉彲浠?/p>
//funcC鏄敤dynamic_cast綾誨瀷杞崲鏄惁鎴愬姛鏉ヨ瘑鍒被鍨?/p>
//dynamic_cast蹇呴』瑕佸湪鏈夎櫄鍑芥暟鐨刪ierarchy閲岃繘琛?br>void funcC(base *p)
{
derived *dp = dynamic_cast<derived*>(p);
if(dp != NULL)
dp->funcB();
else
p->funcA();
}
//funcD鐢╰ypeid鎿嶄綔絎?/p>
void funcD(base *p)
{
derived *dp = NULL;
if (typeid(*p) == typeid(derived))
{
dp = static_cast<derived*>(p);
dp->funcB();
}
else
p->funcA();
}
int main()
{
base *cp = new derived;
funcD(cp);
funcC(cp);
base *dp = new base;
funcC(dp);
funcD(dp);
return 0;
}