C C 類和物件 RTTI和虛函式表

2022-08-13 06:57:14 字數 2552 閱讀 8789

run time type identification:執行時型別識別;通過執行時型別識別,程式能夠使用基類的指標或引用來檢查這些指標或引用所指向的物件的實際派生型別。

human *phuman = new men;

human &q = *phuman;

主要是通過兩個運算子來實現的:

dynamic_cast:能夠將基類指標或者引用安全的轉換為派生類的指標或者引用;

typeid:返回指標或者引用所指物件的實際型別;

注意

要想讓1和2正常工作,那麼基類中必須至少有乙個虛函式,否則這兩個運算子的結果可能跟我們預想的不一樣;因為只有虛函式的存在,這兩個運算子才會使用指標或者引用所繫結的物件的動態型別(new的型別);

#include using namespace std;

class human

;human::human()

human::~human()

human::human(int tmp)

//men是human的子類

class men:public human

;men::men()

men::~men()

men::men(int tmp)

void men::eat()

//women是human的子類

class women :public human

;women::women()

women::~women()

women::women(int tmp)

void women::eat()

int main()

#include using namespace std;

class human

;human::human()

human::~human()

human::human(int tmp)

//men是human的子類

class men:public human

;men::men()

men::~men()

men::men(int tmp)

void men::eat()

//women是human的子類

class women :public human

;women::women()

women::~women()

women::women(int tmp)

void women::eat()

int main()

catch(std::bad_cast) //轉換不成功

return 0;

}

typeid(型別[指標/引用]/表示式);//得到物件型別資訊
typeid會返回乙個常量物件的引用,這個常量物件是乙個標準庫型別type_info(類/類型別);

#include using namespace std;

class human

;human::human()

human::~human()

human::human(int tmp)

//men是human的子類

class men:public human

;men::men()

men::~men()

men::men(int tmp)

void men::eat()

//women是human的子類

class women :public human

;women::women()

women::~women()

women::women(int tmp)

void women::eat()

int main()

typeid就返回乙個常量物件的引用,這個常量物件是乙個標準庫型別type_info(類/類型別)

#include using namespace std;

class human

;human::human()

human::~human()

human::human(int tmp)

//men是human的子類

class men:public human

;men::men()

men::~men()

men::men(int tmp)

void men::eat()

//women是human的子類

class women :public human

;women::women()

women::~women()

women::women(int tmp)

void women::eat()

int main()

int main()

物件導向程式設計 虛函式表和虛基類表

一 虛函式表 每個含有虛函式的類有一張虛函式表 vtbl 表中每一項是乙個虛函式的位址,也就是說,虛函式表的每一項是乙個虛函式的指標。沒有虛函式的c 類,是不會有虛函式表的 如果派生類是多重繼承,則有多少個有虛函式的基類,就對應有多少個虛函式表。這說明沒有另外生成乙個派生類自己的虛函式表指標。那派生...

虛函式和虛函式表

虛函式和虛函式表 1 虛函式 c 中的虛函式的作用主要是實現了多型的機制。關於多型,簡而言之就是用父型別的指標指向其子類的例項,然後通過父類的指標呼叫實際子類的成員函式。這種技術可以讓父類的指標有 多種形態 這是一種泛型技術。如果呼叫非虛函式,則無論實際物件是什麼型別,都執行基類型別所定義的函式。非...

虛函式和虛函式表

多型是由虛函式實現的,而虛函式主要是通過虛函式表 v table 來實現的。這個類的每乙個物件都會包含乙個虛指標 虛指標存在於物件例項位址的最前面,保證虛函式表有最高的效能 這個虛指標指向虛函式表。注 物件不包含虛函式表,只有虛指標,類才包含虛函式表,派生類會生成乙個相容基類的虛函式表。下圖是原始基...