שאלה די בסיסית ב C++

שאלה די בסיסית ב C++

נאמר שיש לי מחלקה A ומחלקה B שיורשת ממנה. נריץ את הקוד הבא:
A a; B b; A *pa = &b; B *pb = &a;​
השורה השלישית חוקית , אך הרביעית תגרור את שגיאת הקומפילציה הבאה :
error: invalid conversion from `A*' to `B*'​
מה קורה פה : מדוע מצביע לA יכול להצביע לכתובת של משתנה מטיפוס B אך לא להפך ?
 

Shay1s

New member
תשובה

נניח ש A ו B מוגדרים ככה:
class A { }; class B: public A { public: void f() const { cout << "this is b" << endl; } };​
ואז אתה כותב pb->f() //err מכיוון שpb מצביע לאובייקט מסוג B הוא אמור להיות מסוגל לספק את כל המתודות שמוגדרות במחלקה B . ולכן זה לא חוקי שpb יצביע לאוביקט מסוג A אבל ההיפך זה חוקי כי כל המתודות שמוגדרות בA מוגדרות גם ב B (כל עצם מסוג B הוא גם עצם מסוג A)
 
למעלה