שימוש פולימורפי
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C של Coddy. שיעור 47 מתוך 61.
אתגר
קלבואו נוכיח שפולימורפיזם באמת עובד, באמצעות כתיבת פונקציה שיכולה לעבד כל צורה דרך המצביע הבסיסי Shape*, בין אם מדובר בעיגול ובין אם במלבן.
בהתבסס על המימושים הקיימים שלך של Circle ו-Rectangle, תוסיף הפשטה עוצמתית: פונקציה יחידה שעובדת באופן אחיד עם כל סוג של צורה.
הפרויקט שלך יכלול את הקבצים האלה:
shape.h: ממשק הבסיס שלךShapeעם הטיפוסיםDrawFuncו-AreaFunc.circle.hו-circle.c: המימוש שלך של Circle מהשיעור הקודם.rectangle.hו-rectangle.c: המימוש שלך של Rectangle מהשיעור הקודם.shape.c: ממש פונקציה חדשה בשםprocess_shapeשמקבלת מצביעShape*. הפונקציה צריכה לקרוא לפונקצייתdrawשל הצורה, ואז לקרוא לפונקצייתareaשלה ולהדפיס את התוצאה עם 2 ספרות אחרי הנקודה העשרונית, בפורמטArea: X.XX.main.c: הדגם פולימורפיזם בפעולה. קרא סמן שמציין את סוג הצורה (cלעיגול,rלמלבן), ואחריו את המידות הדרושות. צור את הצורה המתאימה, ואז העבר ל-process_shapeמצביע לחברShapeהמשובץ בה. אותה פונקציה מטפלת בשני הסוגים!
התוכנית שלך תקבל אחד מהבאים:
cואחריו ערך רדיוס, אוrואחריו ערכי רוחב וגובה
פלט לדוגמה כאשר הקלטים הם c ו-5.0:
Drawing Circle with radius: 5.00
Area: 78.54פלט לדוגמה כאשר הקלטים הם r, 4.0 ו-3.0:
Drawing Rectangle with width: 4.00 and height: 3.00
Area: 12.00הקסם כאן הוא של-process_shape אין מושג אם היא עובדת עם Circle או עם Rectangle. היא מכירה רק את הממשק Shape. באמצעות המרה של חבר ה-Shape המשובץ בצורה הקונקרטית שלך למצביע Shape*, אפשר להעביר כל סוג של צורה לפונקציה היחידה הזו. זהו פולימורפיזם: פונקציה אחת, התנהגויות מרובות בהתאם לסוג האובייקט בפועל.
זכור להצהיר על process_shape ב-shape.h כדי שאפשר יהיה לקרוא לה מתוך main.c.
נסו בעצמכם
#include <stdio.h>
#include "shape.h"
#include "circle.h"
#include "rectangle.h"
int main() {
// TODO: קראו תו עבור סוג הצורה ('c' עבור מעגל, 'r' עבור מלבן)
// TODO: אם 'c', קראו את הרדיוס, צרו Circle וקראו ל-process_shape עם הבסיס שלו
// TODO: אם 'r', קראו את הרוחב והגובה, צרו Rectangle וקראו ל-process_shape עם הבסיס שלו
return 0;
}
כל השיעורים ביחידה תכנות מונחה עצמים
4כימוס
המושג של מצביעים אטומיםהגדרת מבנים אטומיםפונקציות Get ו-Setאימות ב-Settersסיכום: הקופסה הסודית2אובייקטים ומתודות
מבנים כאובייקטיםמצביע 'Self'נכונות constמצביע לעומת ערךמתודות עזרחזרה: מנהל נקודות5פרויקט: חשבון בנק פשוט
הגדרת הפרויקטמימוש החשבוןתרגלו בעצמכם: קומפיילר C אונליין