//一道筆試題
//考察RTTI的基本知識(shí), 運(yùn)行時(shí)類型識(shí)別
//還要打開(kāi)VC編譯器的RTTI功能
//Project / Settings/ C/C++ /Catogory選C++ language就看到那個(gè)選項(xiàng)了
#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能夠輸出形參的真實(shí)類型,下面兩個(gè)func都可以//funcC是用dynamic_cast類型轉(zhuǎn)換是否成功來(lái)識(shí)別類型
//dynamic_cast必須要在有虛函數(shù)的hierarchy里進(jìn)行
void funcC(base *p)
{
derived *dp = dynamic_cast<derived*>(p);
if(dp != NULL)
dp->funcB();
else
p->funcA();
}//funcD用typeid操作符
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;
}