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;

[עריכה] קישורים חיצוניים