分類: c/c++
c/c++
2010-11-14 00:28
193人閱讀收藏
舉報例如:
class a
; class b:public a
從記憶體的來看
如a ---------|
|佔乙個int資料大小--|
|----(aa資料)------|
|---------
而b則是
---------|---------
|佔乙個int資料大小--|佔乙個int資料大小--|
|從a中繼承而來------|---(bb資料----------|
|------------------
當定義乙個基類型別的指標時
a *p;這時,這個指標指向的是a型別的資料
當p指標指向派生類的時候,因為p是a型別的指標,所以*p只解釋為a型別資料的長度,即
————————-|---------
|佔乙個int資料大小--|佔乙個int資料大小--|
|從a中繼承而來------|-----(bb資料)-------|
|------------------
|------------|------------|
|-p只指向這個區域_--|
因此,當基類的指標(p)指向派生類的時候,只能操作派生類中從基類中繼承過來的資料。
指向派生類的指標,因為記憶體空間比基類長,會導致嚴重了後果,所以不允許派生類的指標指向基類。而基類的指標可以指向派生類。
c++的多型性能解決基類指標不能操作派生類的資料成員的問題。
用c++比較好說明白:
1:指標的可訪問性是由指標的定義決定的,比如說用baseclass定義的指標,可訪問的範圍就是baseclass的記憶體區域
2:允許用乙個指向基類的指標指向派生類,由於被指向的物件的記憶體空間大於指標的可訪問空間,所以這種向上對映是安全的
3:物件在呼叫虛函式的時候,是呼叫父類的函式還是呼叫派生類的函式,是和物件的型別有關的,比如說乙個派生類b,其父類是a,則b的物件呼叫父類中被宣告為virtual的函式時,被b 所override的函式呼叫的是b裡的函式,而b沒有override的函式呼叫的是基類裡的函式
為什麼父類指標可以指向子類,反之則不行?
為什麼父類指標可以指向子類反之則不行?例如 cpp view plain copy class a class b public a 從記憶體的來看 如a plain view plain copy 先看a 佔乙個int資料大小 aa資料 而b則是 佔乙個int資料大小 佔乙個int資料大小 從a中...
父類指標可以指向子類物件,反之則不能。
最近準備考研複試內容,都是c c 選擇題,做點筆記。簡單來說,c 的多型就是靠父類指標指向子類物件 虛函式來實現的。父類指標指向子類物件,可以呼叫子類從父類繼承來的那一部分,但如果父類中宣告了virtual,則可以呼叫子類中的方法,這樣就實現了多型。而子類指標指向父類物件,可能會呼叫到父類中沒用的方...
c 父類指標指向子類物件
父類子類指標函式呼叫注意事項 1,如果以乙個基礎類指標指向乙個衍生類物件 派生類物件 那麼經由該指標只能訪問基礎類定義的函式 靜態聯翩 2,如果以乙個衍生類指標指向乙個基礎類物件,必須先做強制轉型動作 explicit cast 這種做法很危險,也不符合生活習慣,在程式設計上也會給程式設計師帶來困擾...