這是老師在上課講的東西
我沒有聽的很清楚
請各位高手幫幫忙囉
何謂RTTI ?
以及RTTI的用法為何 ?
2005-01-10 19:57:15 · 1 個解答 · 發問者 ? 2 in 電腦與網際網路 ➔ 程式設計
簡易解說如下:
=====================================================================
BCB中的RTTI機制 – Gary Lee
何謂RTTI?
RTTI在BCB中其實有兩個意義。首先,針對一般標準的C++中所定義的,RTTI是所謂的Run-Time Type Identification的縮寫。傳統的程式語言中,所謂的資料型態僅在Compile-Time有所作用。舉例而言,您宣告了一個變數a,並且指定其型態為整數。您如何在Run-Time期間知道他的型態是整數呢?很遺憾的是,在原來的C/C++中您是無法知道這樣的事情的。或許您會問,這樣的資訊有何作用?若是您考慮物件的繼承關係,您就會發現其重要性了。
舉例而言,若您有下面的程式:
class CShape {
…
public:
virtual void ShowMe() = 0; // Virtual function
} ;
class CRectangle {
public:
void ShowMe();
};
viod Show(CShape *someShape) {
someShape->ShowMe();
}
int main(void) {
CRectangle myRect ;
Show(&myRect);
CNotShape notShape ;
Show(¬Shape); // Error!!
}
上面的程式中CShape為base class。而CRectangle繼承它。因此,在main function中的第一個Show()可以正常動作,因為在Show()中,someShape->ShowMe()可以正確的找到在CRectangle的ShowMe()函式。可是第二個Show()就會有問題,原因在於CNotShape並非繼承於CShape,所以沒有ShowMe()的函式可用。因此,會造成Access Violation的狀況發生。或許您會覺得這種狀況不會發生在您身上,但是請想想如果您是程式庫的設計者,您如何可確保使用者不會隨便指定奇怪的物件給您呢?所以如果能夠在執行期判斷傳進的物件真正的型態以及其繼承關係,就可以直接判斷傳入的物件可否使用。否則便傳回錯誤。這樣便可避免Access Violation的問題。能夠提供這個解決方法的便是所謂的C++的RTTI機制了。
=====================================================================
以上,是引自「http://www.dev.idv.tw/wp/index.php?p=23」
裡面有相當多的解說和使用範例,因為篇幅相當大,我就不貼上了,
請需要的人到這個連結參閱囉~
希望能解答你的問題 : )
2005-01-10 20:44:54 · answer #1 · answered by Paradisaea 2 · 0⤊ 0⤋