Menu
Coddy logo textTech

Özet - Çalışan Hiyerarşisi

Coddy'nin C++ Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 55 / 104.

challenge icon

Görev

Kolay

Bu bölümde öğrendiğiniz tüm kalıtım kavramlarını bir araya getiren eksiksiz bir çalışan hiyerarşisi sistemi oluşturalım. Ortak özellikleri paylaşan ancak özelleştirilmiş davranışlara sahip farklı çalışan türleriyle bir şirket yapısı oluşturacaksınız.

Kodunuzu dört dosyaya ayıracaksınız:

  • Employee.h: Tüm çalışan türlerinin kalıtım alacağı temel Employee sınıfını tanımlayın. Her çalışanın bir adı, bir kimliği ve bir temel maaşı vardır. Şunları ekleyin:
    • Ad (std::string), kimlik (int) ve baseSalary (double) için korumalı üyeler
    • Her üç değeri başlatan bir kurucu
    • Şunu yazdıran sanal bir displayInfo() metodu: Employee: <name> (ID: <id>)
    • Temel maaşı döndüren sanal bir calculateSalary() metodu
    • Sanal bir yıkıcı
  • Manager.h: Manager sınıfından public olarak kalıtım alan bir Employee sınıfı tanımlayın. Yöneticiler ekip büyüklüklerine göre prim alır:
    • Özel bir int teamSize üyesi
    • Ad, kimlik, temel maaş ve ekip büyüklüğünü alan bir kurucu: temel kurucuya uygun şekilde zincirleme çağrı yapın
    • Şunu yazdırmak için displayInfo() metodunu geçersiz kılın: Manager: <name> (ID: <id>) - Team of <teamSize>
    • Her ekip üyesi için 500 ekleyerek temel maaşı döndürmek üzere calculateSalary() metodunu geçersiz kılın
  • Developer.h: Developer sınıfından public olarak kalıtım alan bir Employee sınıfı tanımlayın. Geliştiricilerin uzmanlaştıkları bir programlama dili vardır ve beceri primi alırlar:
    • Özel bir std::string language üyesi
    • Ad, kimlik, temel maaş ve programlama dilini alan bir kurucu
    • Şunu yazdırmak için displayInfo() metodunu geçersiz kılın: Developer: <name> (ID: <id>) - <language>
    • 1000 beceri primi ekleyerek temel maaşı döndürmek üzere calculateSalary() metodunu geçersiz kılın
  • main.cpp: Altı girdi okuyun (her biri ayrı bir satırda):
    1. Yönetici adı
    2. Yönetici kimliği
    3. Yöneticinin temel maaşı
    4. Geliştirici adı
    5. Geliştirici kimliği
    6. Geliştiricinin temel maaşı

    Ekip büyüklüğü 4 olan bir Manager ve uzmanlık alanı "C++" olan bir Developer oluşturun. Her ikisine ait işaretçileri Employee* işaretçilerinden oluşan bir dizide saklayın. Her çalışan için displayInfo() metodunu çağırmak ve hesaplanan maaşı aşağıdaki biçimde yazdırmak üzere dizi üzerinde döngü kurun:

    <displayInfo output>
    Salary: $<calculated salary>

    Çalışanlar arasında boş bir satır yazdırın. Tüm çalışanları görüntüledikten sonra dinamik olarak ayrılan nesneleri uygun şekilde silin.

Örneğin girdiler Sarah, 101, 5000, Mike, 102 ve 4500 olduğunda:

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

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

Bu alıştırma, polimorfizmi uygulamalı olarak gösterir: temel sınıf işaretçileri üzerinden sanal metotların çağrılması, doğru türetilmiş sınıf uygulamalarını çağırır. override anahtar sözcüğünü kullanmayı ve uygun temizleme için temel sınıfınıza sanal bir yıkıcı eklemeyi unutmayın.

Kendin dene

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

using namespace std;

int main() {
    // Yönetici girdilerini oku
    string managerName;
    int managerId;
    double managerSalary;
    
    getline(cin, managerName);
    cin >> managerId;
    cin >> managerSalary;
    cin.ignore();
    
    // Geliştirici girdilerini oku
    string developerName;
    int developerId;
    double developerSalary;
    
    getline(cin, developerName);
    cin >> developerId;
    cin >> developerSalary;
    
    // TODO: Takım boyutu 4 olan bir Manager oluştur
    // TODO: "C++" konusunda uzmanlaşmış bir Developer oluştur
    
    // TODO: Her iki çalışanı saklamak için Employee* işaretçilerinden bir dizi oluştur
    
    // TODO: Diziyi döngüyle gez ve her çalışan için:
    //   - displayInfo() çağır
    //   - Yazdır: Salary: $<hesaplanan maaş>
    //   - Çalışanlar arasında boş bir satır yazdır (sonuncusundan sonra değil)
    
    // TODO: Dinamik olarak ayrılmış nesneleri sil
    
    return 0;
}

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online C++ derleyicisi