מימוש מעגל
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C של Coddy. שיעור 45 מתוך 61.
אתגר
קלנמשיך לבנות את פרויקט Shape Drawer באמצעות מימוש של Circle: צורה קונקרטית שמכילה את מבנה הנתונים הבסיסי Shape ומספקת לוגיקה משלה לציור ולחישוב שטח.
בהתבסס על התשתית מהשיעור הקודם, נרחיב את הפרויקט בעזרת הקבצים הבאים:
shape.h: השאירו את הממשק הבסיסיShapeמהשיעור הקודם, עם טיפוסי מצביעי הפונקציותDrawFuncו-AreaFunc.circle.h: הגדירו כאן את המבנהCircle. מעגל מכיל אתShapeבתור האיבר הראשון שלו (וכך מאפשר את כלל האיבר הראשון להמרה כלפי מעלה) ומוסיף שדהradiusמסוגdouble. הצהירו על פונקציית בנאי בשםcreate_circleשמקבלת רדיוס ומחזירה ערך מסוגCircle.circle.c: ממשו כאן את ההתנהגות הייחודית למעגל:draw_circle: מדפיסהDrawing Circle with radius: X.XX(הרדיוס מוצג עם 2 ספרות אחרי הנקודה העשרונית)area_circle: מחזירה π × רדיוס² (השתמשו ב-3.14159עבור π)create_circle: מאתחלתCircle, מחברת את מצביעי הפונקציות שלShapeהמוטמע כך שיצביעו עלdraw_circleועלarea_circle, מגדירה את הרדיוס ומחזירה את המעגל
main.c: חברו את כל החלקים. קראו ערך רדיוס כקלט, צרו מעגל באמצעות הבנאי שלכם, ואז קראו גם ל-drawוגם ל-areaדרך מצביעי הפונקציות שלShapeהמוטמע. הדפיסו את השטח עם 2 ספרות אחרי הנקודה העשרונית.
התוכנית שלכם תקבל קלט אחד: ערך של רדיוס (כמספר נקודה צפה).
פלט לדוגמה כאשר הקלט הוא 5.0:
Drawing Circle with radius: 5.00
Area: 78.54פלט לדוגמה כאשר הקלט הוא 3.5:
Drawing Circle with radius: 3.50
Area: 38.48התובנה המרכזית היא ש-Circle מכיל Shape בתור האיבר הראשון שלו, ולכן אפשר לגשת למצביעי הפונקציות דרך circle.base.draw ו-circle.base.area (או דרך כל שם שתבחרו לאיבר המוטמע). בעת קריאה לפונקציות האלה, העבירו מצביע לאיבר Shape. זכרו להשתמש בשומרי הכללה בכל קובצי הכותרת.
נסו בעצמכם
#include <stdio.h>
#include "shape.h"
#include "circle.h"
int main() {
double radius;
scanf("%lf", &radius);
// TODO: צרו Circle באמצעות create_circle
// TODO: קראו ל־draw דרך מצביע הפונקציה של Shape המוטמע
// TODO: קראו ל־area דרך מצביע הפונקציה של Shape המוטמע
// והדפיסו עם 2 ספרות אחרי הנקודה העשרונית: "Area: %.2f\n"
return 0;
}כל השיעורים ביחידה תכנות מונחה עצמים
4כימוס
המושג של מצביעים אטומיםהגדרת מבנים אטומיםפונקציות Get ו-Setאימות ב-Settersסיכום: הקופסה הסודית2אובייקטים ומתודות
מבנים כאובייקטיםמצביע 'Self'נכונות constמצביע לעומת ערךמתודות עזרחזרה: מנהל נקודות5פרויקט: חשבון בנק פשוט
הגדרת הפרויקטמימוש החשבוןתרגלו בעצמכם: קומפיילר C אונליין