C typeid 基類必須是多型類

2021-07-05 09:19:33 字數 737 閱讀 9294

基類如果沒有虛函式。輸出結果(rtti)就不對。不知道為什麼。環境:win2000、vs2003、控制台工程。/gr

class baseclass; 

};class derivedclass1 : public baseclass{};

class derivedclass2 : public baseclass{};

int _tmain(int argc, _tchar* argv)

其實,這根本不是錯誤。iso c++98 規定,涉及繼承的 rtti 都要求物件是「多型型別」:

5.2.7 dynamic cast

條款6 在其他情況下, v 必須是多型型別(10.3)的指標或者左值。

5.2.8 type identification

條款2 當type_info作用於多型型別(10.3)左值的時候,結果是描述最後繼承物件的 type_info 物件(即,動態物件)。

那麼多型型別是什麼呢?

10.3 virtual functions

條款1 ... 乙個包含或者繼承虛函式的class 被稱為多型 class

看來虛函式和rtti的確存在深刻的聯絡。但是,c++ 為什麼要這樣規定?

什麼是基類,什麼是父類

基類就是父類,派生類就是子類 你可以理解為生活中的父子關係,也就是說兒子繼承了所有的父親的樣貌特徵,但是兒子也有父親所沒有的一些特點 專業點講,就是子類可以繼承並使用父類的屬性和方法,也可以有自己的屬性和方法!不知道這麼說你能理解不?這裡又要講到一些繼承的特性 繼承使用繼承是為了減少 的冗餘,增強 ...

什麼是基類,什麼是父類

基類就是父類,派生類就是子類 你可以理解為生活中的父子關係,也就是說兒子繼承了所有的父親的樣貌特徵,但是兒子也有父親所沒有的一些特點 專業點講,就是子類可以繼承並使用父類的屬性和方法,也可以有自己的屬性和方法!不知道這麼說你能理解不?這裡又要講到一些繼承的特性 繼承使用繼承是為了減少 的冗餘,增強 ...

多型之基類函式重寫

下面程式有乙個b類,有乙個a函式,呼叫了自身的b函式 思考 如果有一天我的這個b類不錯,別人想用使用,他拿過去的時候發現b函式並不能滿足他的要求,但是功能就是這個樣子 那麼怎麼解決呢?為了方便給別人使用,並且不破壞我的b類,我就把b函式定義成虛函式,別人可以通過繼承來重寫它。這樣這個問題就解決了。下...