父類指針可以指向子類對象,反之則不能


簡單來說,C++的多態就是靠父類指針指向子類對象+虛函數來實現的。父類指針指向子類對象,可以調用子類從父類繼承來的那一部分,但如果父類中聲明了virtual,則可以調用子類中的方法,這樣就實現了多態。而子類指針指向父類對象,可能會調用到父類中沒用的方法,因此這是不對的。
至於兩類指針的互換是另一個問題。


例如:
class a
{public:
int aa};
class b:public a
{public:
int bb;
}
從內存的來看
如a
---------|
|占一個int數據大小--|
|----(aa數據)------|
|---------
而b則是
---------|---------
|占一個int數據大小--|占一個Int數據大小--|
|從a中繼承而來------|---(bb數據----------|
|------------------
當定義一個基類類型的指針時
a *p;這時,這個指針指向的是a類型的數據
當p指針指向派生類的時候,因為p是a類型的指針,所以*p只解釋為a類型數據的長度,即
————————-|---------
|占一個int數據大小--|占一個Int數據大小--|
|從a中繼承而來------|-----(bb數據)-------|
|------------------
|------------|------------|
|-p只指向這個區域_--|

因此,當基類的指針(P)指向派生類的時候,只能操作派生類中從基類中繼承過來的數據。
指向派生類的指針,因為內存空間比基類長,會導致嚴重了后果,所以不允許派生類的指針指向基類。而基類的指針可以指向派生類。

C++的多態性能解決基類指針不能操作派生類的數據成員的問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM