在多型的使用時,
派生類的指標或引用能夠轉換為基類的指標或引用, 即
基類的指標
能夠指向
派生類的基類部分;
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的使用是有侷限的,也就是基類一定要有虛...