動態轉換dynamic_cast
只能從上轉換至下
eg:從父類指標轉換成子類的指標 否則報錯
class
bvirtual~b
()};
classd:
public b
void
test()
};intmain()
d*dp =
dynamic_cast
>
(bp);if
(dp ==
null
)else
return0;
}
靜態轉換static_cast
可以從下至上 不會報錯 但有訪問不到子類的內容
classb}
;classd:
public b};
intmain()
classb1}
;classb2}
;classd:
public b1,
public b2};
intmain()
執行結果:
255d010… //bp1 原始位址
255d030… // bp2 原始位址
255d010…// 強制轉換後 第乙個位址保持不變
255d02c…// 但出於第二繼承的父類 指標進行偏移
const相關的強制轉換
int
main()
指標強制轉換
c 和 c 的指標強制轉換時不太一樣的,c 提供了4中型別,用於更加精細化控制指標的強制轉換。1 指標轉換原理 討論指標的強制轉換之前,我們先要理解清楚指標的根本含義。最通俗的解釋,指標即是位址,但是,指標絕不僅僅只是位址。1 指標存著所指物件位址 2 指標存著所指物件的型別和型別大小 試想我們定義...
指標強制轉換
指標強制轉換在指令變數賦值上,只是編譯器的乙個善意的提醒,在組合語言中,和不加強制轉換的指令時一樣的,並沒有多產生指令。強制轉換後的影響不是在轉換的時候發生,而是在用轉換後的身份去訪問記憶體時體現到了指令中。例子 6 int i globle variable 7 int pi globle var...
指標的強制轉換
前面曾經講過,如果指標變數指向的變數型別相同,兩個指標變數可以互相賦值。如果指向的變數型別不同,可以先對指標進行型別強制轉換。下面用乙個具體的例子說明 main 程式執行的結果為 pl aaaabbbb pn bbbb pn aaaa 如圖所示,long型變數num在記憶體占用4個位元組,假設首位址...