Menu
Coddy logo textTech

סיכום – היררכיית עובדים

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

challenge icon

אתגר

קל

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

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

  • Employee.h: הגדר את מחלקת הבסיס Employee, שממנה יירשו כל סוגי העובדים. לכל עובד יש שם, מזהה ומשכורת בסיס. כלול:
    • חברים מוגנים עבור השם (std::string), המזהה (int) והמשכורת הבסיסית (baseSalary מסוג double)
    • בנאי שמאתחל את שלושת הערכים
    • מתודה וירטואלית displayInfo() שמדפיסה: Employee: <name> (ID: <id>)
    • מתודה וירטואלית calculateSalary() שמחזירה את משכורת הבסיס
    • הורס וירטואלי
  • Manager.h: הגדר מחלקת Manager שיורשת באופן ציבורי מ-Employee. מנהלים מקבלים בונוס בהתאם לגודל הצוות שלהם:
    • חבר פרטי int teamSize
    • בנאי שמקבל שם, מזהה, משכורת בסיס וגודל צוות: שרשר כראוי לבנאי של מחלקת הבסיס
    • דרוס את displayInfo() כדי להדפיס: Manager: <name> (ID: <id>) - Team of <teamSize>
    • דרוס את calculateSalary() כדי להחזיר את משכורת הבסיס בתוספת 500 עבור כל חבר צוות
  • Developer.h: הגדר מחלקת Developer שיורשת באופן ציבורי מ-Employee. למפתחים יש שפת התמחות והם מקבלים בונוס מיומנות:
    • חבר פרטי std::string language
    • בנאי שמקבל שם, מזהה, משכורת בסיס ושפת תכנות
    • דרוס את displayInfo() כדי להדפיס: Developer: <name> (ID: <id>) - <language>
    • דרוס את calculateSalary() כדי להחזיר את משכורת הבסיס בתוספת בונוס מיומנות של 1000
  • main.cpp: קרא שישה קלטים (כל אחד בשורה נפרדת):
    1. שם המנהל
    2. המזהה של המנהל
    3. משכורת הבסיס של המנהל
    4. שם המפתח
    5. המזהה של המפתח
    6. משכורת הבסיס של המפתח

    צור מנהל עם גודל צוות 4 ומפתח שמתמחה ב-"C++". אחסן מצביעים לשניהם במערך של מצביעי Employee*. עבור על המערך כדי לקרוא ל-displayInfo() ולהדפיס את המשכורת המחושבת של כל עובד בפורמט הבא:

    <displayInfo output>
    Salary: $<calculated salary>

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

לדוגמה, עם הקלטים Sarah, 101, 5000, Mike, 102 ו-4500:

Manager: Sarah (ID: 101) - Team of 4
Salary: $7000

Developer: Mike (ID: 102) - C++
Salary: $5500

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

נסו בעצמכם

#include <iostream>
#include <string>
#include "Employee.h"
#include "Manager.h"
#include "Developer.h"

using namespace std;

int main() {
    // קרא את הקלט של Manager
    string managerName;
    int managerId;
    double managerSalary;
    
    getline(cin, managerName);
    cin >> managerId;
    cin >> managerSalary;
    cin.ignore();
    
    // קרא את הקלט של Developer
    string developerName;
    int developerId;
    double developerSalary;
    
    getline(cin, developerName);
    cin >> developerId;
    cin >> developerSalary;
    
    // TODO: צור Manager עם צוות בגודל 4
    // TODO: צור Developer שמתמחה ב-"C++"
    
    // TODO: צור מערך של מצביעי Employee* לאחסון שני העובדים
    
    // TODO: עבור על המערך, ועבור כל עובד:
    //   - קרא ל-displayInfo()
    //   - הדפס: Salary: $<השכר המחושב>
    //   - הדפס שורה ריקה בין העובדים (לא אחרי האחרון)
    
    // TODO: מחק את האובייקטים שהוקצו דינמית
    
    return 0;
}

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

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