C 派生類強制轉換為基類

2021-09-07 10:52:00 字數 924 閱讀 6226

在多型的使用時, 

派生類的指標或引用能夠轉換為基類的指標或引用, 即

基類的指標

能夠指向

派生類的基類部分;

base* b = derived* d;

b和d指向的內容是相等的, b == d, 由於之間有乙個隱式轉換即 b == (base*)d;

b和d的位址是不同的int(b) != int(d), 由於b指向d的基類部分, d指向的是完整的派生類;

但假設進行隱身轉換, int(b) != int((base*)d), 則位址同樣.

**例如以下:

/*

* test.cpp

* * created on: 2014.04.21

* author: spike

*//*eclipse cdt, gcc 4.8.1*/

#include class a ;

class b ;

class c : public a, public b ;

int main(void)

else

if (int(pc) == int(pb)) else

if (int(pc) == int((c*)pb)) else

return 0;

}

輸出:

C 關於基類是否可以強制轉換為其派生類

簡單的理解 1 可以將乙個派生類隱式的賦值給其基類 2 無法將乙個基類強制轉換為其派生類,但一種情況例外,如果基類是由目標派生類或者目標派生類的派生類 即子類的子類 實現的,則可以強制的將這個基類轉換為對應的派生類。例如 對於mybmwcar類繼承至 mycar類,mycar類繼承至myobject...

c 派生類轉換為基類的意義

由於這段時間一直糾結於c 繼承的一些小問題,所以把這段時間的收穫寫下。如下 using system using system.collections.generic namespace x class baima ma static void main 書上有這樣一句話 派生類物件允許轉換為基類物...

C 基類 派生類指標轉換

主要用到static cast和dynamic cast dynamic cast 1.dynamic cast是非常安全的,因為在不行的時候他會返回空指標 2.在多繼承中,由乙個基類轉換到另乙個基類,只能用dynamic cast 但是dynamic cast的使用是有侷限的,也就是基類一定要有虛...