2008年8月14日 星期四

c++ - 執行時期型態資訊(RTTI)

在繼承的時候有說過,
基礎類別的指標可以指定到衍生類別的物件,在編譯的時候,並沒有辦法知道此基礎類別指標會指定到哪一個衍生類別,當我們想要知道此基礎類別是指定哪一個衍生類別的物件時,我們可以使用typeid()來取得衍生類別的資訊。

會使用到這一個RTTI基本上有一個情況
一、基礎類別Base有兩個衍生類別Derived1和Derived2,而在衍生類別中,分別定義兩個不同函數,當我們把基底類別的指標指到其中一個衍生物件時,而我們必需依不同的衍生類別執行不同的函數;因此,我們必需要在程式中判斷,目前的基底指標指到哪一個衍生物件,因而決定呼叫哪一個函數。

但無論如何,基底類別的指標仍然無法使用衍生類別的function,此時,則必需要使用型態傳換。除非這一個function是virtual function。

在QT中可以用const char * QObject::className () const取代,使用這一個時,必需在前面加入Q_OBJECT

詳細的程式碼,請參考C++ Gossip: 執行時期型態資訊(RTTI)

沒有留言: