為什麼父類指標可以指向子類反之則不行

2021-06-03 19:07:00 字數 1158 閱讀 7753

分類: 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 這種做法很危險,也不符合生活習慣,在程式設計上也會給程式設計師帶來困擾...