Menu
Coddy logo textTech

סיכום — מחשבון צורות

חלק מהיחידה תכנות מונחה עצמים במסלול ה-C++ של Coddy. שיעור 63 מתוך 104.

challenge icon

אתגר

קל

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

תארגן את הקוד שלך בארבעה קבצים:

  • Shape.h: הגדר מחלקת Shape מופשטת שתשמש כתבנית לכל הצורות. מחלקת הבסיס שלך צריכה לכלול:
    • איבר מוגן מסוג std::string name לזיהוי הצורה
    • בנאי שמאתחל את השם
    • מתודות וירטואליות טהורות area() ו-perimeter() שמחזירות double
    • מתודת getName() שמחזירה את שם הצורה
    • הורס וירטואלי
  • Circle.h: ממש מחלקת Circle שיורשת מ-Shape:
    • איבר פרטי מסוג double radius
    • בנאי שמקבל את הרדיוס (הגדר את השם ל-"Circle")
    • ממש את area() באמצעות הנוסחה: 3.14159 * radius * radius
    • ממש את perimeter() באמצעות: 2 * 3.14159 * radius
  • Rectangle.h: ממש מחלקת Rectangle שיורשת מ-Shape:
    • איברים פרטיים מסוג double width ו-double height
    • בנאי שמקבל רוחב וגובה (הגדר את השם ל-"Rectangle")
    • ממש את area() בתור width * height
    • ממש את perimeter() בתור 2 * (width + height)
  • main.cpp: קרא ארבעה ערכים (כל אחד בשורה נפרדת):
    1. רדיוס המעגל (double)
    2. רוחב המלבן (double)
    3. גובה המלבן (double)
    4. רדיוס המעגל השני (double)

    צור את כל שלוש הצורות באופן דינמי ואחסן אותן במערך של מצביעי Shape*. עבור על המערך, ולכל צורה הדפס את המידע שלה בפורמט הבא:

    <name>:
      Area: <area>
      Perimeter: <perimeter>

    הדפס שורה ריקה בין כל צורה. נקה את האובייקטים שהוקצו באופן דינמי כשתסיים.

לדוגמה, עבור הקלטים 5, 4, 6 ו-3:

Circle:
  Area: 78.5397
  Perimeter: 31.4159

Rectangle:
  Area: 24
  Perimeter: 20

Circle:
  Area: 28.2743
  Perimeter: 18.8495

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

נסו בעצמכם

#include <iostream>
#include "Shape.h"
#include "Circle.h"
#include "Rectangle.h"

using namespace std;

int main() {
    // קראו את הקלטים
    double circleRadius1, rectWidth, rectHeight, circleRadius2;
    cin >> circleRadius1;
    cin >> rectWidth;
    cin >> rectHeight;
    cin >> circleRadius2;

    // TODO: צרו מערך של מצביעי Shape* עם 3 איברים
    // Shape* shapes[3];

    // TODO: צרו צורות באופן דינמי ושמרו אותן במערך
    // shapes[0] = new Circle(...);
    // shapes[1] = new Rectangle(...);
    // shapes[2] = new Circle(...);

    // TODO: עברו על המערך והדפיסו את המידע על כל צורה
    // פורמט:
    // <name>:
    //   Area: <area>
    //   Perimeter: <perimeter>
    // (שורה ריקה בין הצורות, אך לא אחרי האחרונה)

    // TODO: שחררו את האובייקטים שהוקצו דינמית
    // delete shapes[i];

    return 0;
}

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר C++ אונליין