סיכום – היררכיית עובדים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C++ של Coddy. שיעור 55 מתוך 104.
אתגר
קלבואו נבנה מערכת היררכיית עובדים שלמה, שמשלבת את כל מושגי ההורשה שלמדת בפרק הזה. תיצור מבנה חברה עם סוגים שונים של עובדים, שחולקים מאפיינים משותפים אך מתנהגים בדרכים ייחודיות.
תארגן את הקוד שלך בארבעה קבצים:
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: קרא שישה קלטים (כל אחד בשורה נפרדת):- שם המנהל
- המזהה של המנהל
- משכורת הבסיס של המנהל
- שם המפתח
- המזהה של המפתח
- משכורת הבסיס של המפתח
צור מנהל עם גודל צוות 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;
}
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות OOP
קבצים חיצונייםבנייה וקומפילציה של C++קובצי Header וקובצי מקורמרחבי שמות והיקףמבוא ל-OOP ב-C++מחלקות לעומת אובייקטיםמצביע thisמתודות (פונקציות איבר)תכונות (חברי נתונים)יסודות הבנאים וההורסיםסיכום – מחשבון פשוט4מאפייני מחלקה
חברי מופע לעומת חברים סטטייםגטרים וסטריםפונקציות איבר קבועותמילת המפתח mutableמתודות ומשתנים סטטייםפונקציות ומחלקות ידידותסיכום – מנהל חשבונות בנק7ירושה
ירושה בסיסיתרמות גישה בירושהסדר הקריאות לבנאי ולמפרקדריסת מתודותפונקציות וירטואליות ו־VTableירושה מרובהירושה וירטואליתסיכום – היררכיית עובדים2ניהול זיכרון
זיכרון Stack לעומת Heapמצביעים והפניותזיכרון דינמי (new/delete)מצביעים חכמים ב-C++RAII ב-C++סיכום – מנהל מערכים דינמיים5כימוס
מצייני גישה ב-C++מצייני גישה לעומקהסתרת מידעמבנה לעומת מחלקהמחלקות מקוננות ופנימיותסיכום – מערכת רשומות תלמידים8רב־צורתיות
רב־צורתיות בזמן קומפילציה לעומת בזמן ריצההעמסת פונקציותפונקציות וירטואליות — מבט נוסףפונקציות וירטואליות טהורותמחלקות מופשטותתכנון ממשקים ב־C++המרה דינמית ו־RTTIסיכום — מחשבון צורות3בנאים והורסים
בנאי ברירת מחדלבנאי עם פרמטריםבנאי העתקהבנאי העברהרשימות אתחול בבנאיםבנאים מאציליםמעמיקים בנושא הורסיםכלל השלושה / החמישה / האפססיכום – מחלקת String6העמסת אופרטורים
מבוא להעמסת אופרטוריםהעמסת אופרטורים אריתמטייםהעמסת אופרטורי השוואהאופרטורי זרםהעמסת אופרטור השמההעמסת האופרטורים [] ו־()אופרטורים להמרת טיפוסיםסיכום – מחלקת Matrix9תבניות
תבניות פונקציהתבניות מחלקההתמחות תבניותתבניות ארגומנטים משתנותיסודות SFINAE ותכונות טיפוסיםסיכום – מכל גנריתרגלו בעצמכם: קומפיילר C++ אונליין