Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - هيكلية الموظفين

جزء من قسم البرمجة كائنية التوجه في رحلة 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. الراتب الأساسي للمطور

    أنشئ Manager بحجم فريق يساوي 4، وأنشئ Developer متخصصًا في "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: $<calculated salary>
    //   - اطبع سطراً فارغاً بين الموظفين (وليس بعد الأخير)
    
    // TODO: احذف الكائنات المخصصة ديناميكياً
    
    return 0;
}

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم C++ عبر الإنترنت