C++/פולימורפיזם: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
Johnny Zoo (שיחה | תרומות)
מאין תקציר עריכה
Johnny Zoo (שיחה | תרומות)
מ קצת עריכה
שורה 10:
פונקציה וירטואלית היא פונקציה שמוגדרת במחלקת האב וניתן לכתוב אותה מחדש במחלקות הנגזרות ממנה.
 
פונקציה וירטואלית טהורה היא פונקציה שמוצהרת כוירטואלית במחלקת האב אך לא ממומשת... המטרה היא שיממשו אותה במחלקות .
 
פונקציה וירטואלית מוגדרת כווירטואלית כחלק ממחלקה, ואז ניתן לשכתבלדרוס אותה (Overwrite אם תרצה לקרוא לזה ככה) במחלקות היורשות ממנה.
 
<source lang="cpp">
:class Shape {
public:
virtual void draw() {cout<<'cannot draw just any shape'};
std::cout << "Cannot draw just any shape" << std::endl;
};
};
</source>
שורה 26 ⟵ 28:
class Circle: public Shape {
public:
void draw() {
/* ... Draw the Circle here ... */} ;
};
};
</source>
פונקציה וירטואלית טהורה היא פונקציה שאינה מוגדרת כלל וכל מטרתה היא שתוגדר מחדש על ידי מחלקות שירשו מחלקה זו.
מחלקה שכוללת פונקציה וירטואלית טהורה נקראת מחלקה אבסטרקטית (מופשטת), ולא ניתן ליצור אוביקטים ממחלקה זו,. זהניסיון יחזירלעשות זאת יגרור שגיאה שלבזמן הקומפיילרההידור. כלומר, נניח והמחלקה שלנו נראית כך:
 
<source lang="cpp">
:
class Shape {
public:
virtual void draw()=0; // draw is a pure virtual function
};
</source>
 
יצירת אובייקט מטיפוס Shape בעזרת הפקודה
 
<source lang="cpp">
 
Shape s;
Shape s; //error: variable of abstract class shape
</source>
תגרור שגיאת הידור. שימו לב שניתן ליצור מצביע לאובייקט מטיפוס Shape. הפקודה הבאה היא חוקית:
<source lang="cpp">
Shape *s;
</source>