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 kuralım. Ortak özelliklere sahip ancak özelleşmiş davranışları olan farklı çalışan türlerinden oluşan bir şirket yapısı oluşturacaksınız.

Kodunuzu dört dosya halinde düzenleyeceksiniz:

  • Employee.h: Tüm çalışan türlerinin miras alacağı temel Employee sınıfını tanımlayın. Her çalışanın bir adı, bir ID'si ve bir temel maaşı vardır. Şunları içermelidir:
    • Ad (std::string), id (int) ve baseSalary (double) için korumalı (protected) üyeler
    • Her üç değeri de başlatan bir yapıcı (constructor)
    • Ş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ı (destructor)
  • Manager.h: Employee sınıfından genel (public) olarak miras alan bir Manager sınıfı tanımlayın. Yöneticiler, ekip büyüklüklerine göre bir bonus alırlar:
    • Özel (private) bir int teamSize üyesi
    • Ad, id, temel maaş ve ekip büyüklüğünü alan bir yapıcı — temel yapıcıya uygun şekilde zincirleme yapın
    • Şunu yazdırmak için displayInfo() metodunu geçersiz kılın (override): Manager: <name> (ID: <id>) - Team of <teamSize>
    • Temel maaş artı her ekip üyesi için 500 döndürmek üzere calculateSalary() metodunu geçersiz kılın
  • Developer.h: Employee sınıfından genel (public) olarak miras alan bir Developer sınıfı tanımlayın. Geliştiricilerin uzmanlık alanları olan bir dilleri vardır ve bir yetenek bonusu alırlar:
    • Özel (private) bir std::string language üyesi
    • Ad, id, temel maaş ve programlama dilini alan bir yapıcı
    • Şunu yazdırmak için displayInfo() metodunu geçersiz kılın: Developer: <name> (ID: <id>) - <language>
    • Temel maaş artı 1000 yetenek bonusu 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 ID'si
    3. Yönetici temel maaşı
    4. Geliştirici adı
    5. Geliştirici ID'si
    6. Geliştirici temel maaşı

    Ekip büyüklüğü 4 olan bir Manager ve "C++" konusunda uzmanlaşmış bir Developer oluşturun. Her ikisinin işaretçilerini bir Employee* işaretçi dizisinde saklayın. Dizide döngü kurarak displayInfo() metodunu çağırın ve her çalışan için hesaplanan maaşı şu formatta yazdırın:

    <displayInfo output>
    Salary: <displayInfo output>
    Salary: $<calculated salary>lt;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ılmış nesneleri uygun şekilde silin.

Örneğin, Sarah, 101, 5000, Mike, 102 ve 4500 girdileriyle:

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

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

Bu zorluk, polimorfizmin (çok biçimlilik) işleyişini gösterir — temel sınıf işaretçileri aracılığıyla sanal metotları çağırmak, doğru türetilmiş sınıf uygulamalarını tetikler. override anahtar kelimesini kullanmayı ve düzgün temizlik 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() {
    // Manager girişlerini oku
    string managerName;
    int managerId;
    double managerSalary;
    
    getline(cin, managerName);
    cin >> managerId;
    cin >> managerSalary;
    cin.ignore();
    
    // Developer girişlerini oku
    string developerName;
    int developerId;
    double developerSalary;
    
    getline(cin, developerName);
    cin >> developerId;
    cin >> developerSalary;
    
    // TODO: Ekip boyutu 4 olan bir Manager oluşturun
    // TODO: "C++" alanında uzmanlaşmış bir Developer oluşturun
    
    // TODO: Her iki çalışanı da saklamak için Employee* işaretçilerinden oluşan bir dizi oluşturun
    
    // TODO: Dizi üzerinde döngü kurun ve her çalışan için:
    //   - displayInfo() fonksiyonunu çağırın
    //   - Yazdırın: Salary: $<calculated salary>
    //   - Çalışanlar arasına boş bir satır yazdırın (sonuncudan sonra değil)
    
    // TODO: Dinamik olarak ayrılmış nesneleri silin
    
    return 0;
}

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