לדלג לתוכן

C++/פולימורפיזם

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי
< C++

פולימורפיזם

[עריכה]

רב צורתיות (בתרגום ישיר). פולימורפיזם הוא אחד מאבני היסוד של תכנות מונחה העצמים (יחד עם הקונספטים של כימוס, הורשה והפשטה). מטרת הפולימורפיזם היא להעלות את רמת ההפשטה של התוכנה, על ידי כך שבכל הפעלת פונקציה על אובייקט של מחלקה המממשת באופן ספציפי ממשק כללי, תופעל הפונקציה הרלוונטית שממומשת עבור מחלקה זו.

פונקציות וירטואליות

[עריכה]

פרק זה לוקה בחסר. אתם מוזמנים לתרום לוויקיספר ולהשלים אותו. ראו פירוט בדף השיחה.



פונקציה וירטואלית היא פונקציה שמוגדרת במחלקת האב וניתן לכתוב אותה מחדש במחלקות הנגזרות ממנה.

פונקציה וירטואלית טהורה היא פונקציה שמוצהרת כוירטואלית במחלקת האב אך לא ממומשת. המטרה היא שיממשו אותה במחלקות היורשות.

פונקציה וירטואלית מוגדרת כווירטואלית כחלק ממחלקה, ואז ניתן לדרוס אותה (Override) במחלקות היורשות ממנה.

class Shape {
public:
    virtual void draw() {
	std::cout << "Cannot draw just any shape" << std::endl;
    };
};

כעת בגלל שהפונקציה מוגדרת כווירטואלית ניתן לשכתב אותה במחלקות היורשות מ-Shape, באופן הבא:

class Circle: public Shape {
public:
    void draw() {
	/* ... Draw the Circle here ... */
    };
};

פונקציה וירטואלית טהורה היא פונקציה שאינה מוגדרת כלל וכל מטרתה היא שתוגדר מחדש על ידי מחלקות שירשו מחלקה זו. מחלקה שכוללת פונקציה וירטואלית טהורה נקראת מחלקה אבסטרקטית (מופשטת), ולא ניתן ליצור אוביקטים ממחלקה זו. ניסיון לעשות זאת יגרור שגיאה בזמן ההידור. כלומר, אם המחלקה שלנו נראית כך:

class Shape {
public:
    virtual void draw()=0; // draw is a pure virtual function
};

יצירת אובייקט מטיפוס Shape בעזרת הפקודה

Shape s;

תגרור שגיאת הידור. שימו לב שניתן ליצור מצביע לאובייקט מטיפוס Shape. הפקודה הבאה היא חוקית:

Shape *s;

קישורים חיצוניים

[עריכה]


הפרק הקודם:
המרות
פולימורפיזם הפרק הבא:
RTTI