Ö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.
Görev
KolayBu 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ğı temelEmployeesı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)
- Ad (
Manager.h:Employeesınıfından genel (public) olarak miras alan birManagersı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
- Özel (private) bir
Developer.h:Employeesınıfından genel (public) olarak miras alan birDevelopersı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
- Özel (private) bir
main.cpp: Altı girdi okuyun (her biri ayrı bir satırda):- Yönetici adı
- Yönetici ID'si
- Yönetici temel maaşı
- Geliştirici adı
- Geliştirici ID'si
- 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ü kurarakdisplayInfo()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: $5500Bu 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
1OOP Temelleri
Harici DosyalarC++ Build ve DerlemeBaşlık Dosyaları ve Kaynak DosyalarıAd Alanları ve KapsamC++'ta OOP'ye GirişSınıflar ve Nesneler'this' İşaretçisiMetotlar (Üye Fonksiyonlar)Öznitelikler (Veri Üyeleri)Ctor ve Dtor TemelleriÖzet - Basit Hesap Makinesi4Sınıf Özellikleri
Örnek ve Statik ÜyelerGetter ve Setter MetotlarıConst Üye FonksiyonlarMutable Anahtar KelimesiStatik Metotlar ve DeğişkenlerFriend Fonksiyonlar ve SınıflarÖzet - Banka Hesabı Yöneticisi7Kalıtım
Temel KalıtımKalıtım Erişim SeviyeleriCtor ve Dtor Çağrılma SırasıMetot Geçersiz KılmaSanal Fonksiyonlar ve VTableÇoklu KalıtımSanal KalıtımÖzet - Çalışan Hiyerarşisi10STL Genel Bakış
STL Genel Bakış ve FelsefesiSTL KonteynerleriİteratörlerSTL AlgoritmalarıFunctor'lar ve Lambda İfadeleriÖzet - Kelime Frekansı13Tasarım Kalıpları 1. Bölüm
Tasarım Kalıplarına GirişSingleton KalıbıFactory ve Abstract FactoryBuilder KalıbıObserver KalıbıStrategy Kalıbı2Bellek Yönetimi
Stack ve Heap Bellekİşaretçiler ve ReferanslarDinamik Bellek (new/delete)C++'ta Akıllı İşaretçilerC++'ta RAIIÖzet - Dinamik Dizi Yöneticisi5Kapsülleme
C++'da Erişim BelirleyicilerDerinlemesine Erişim BelirleyicilerBilgi GizlemeStruct vs Classİç İçe ve Dahili SınıflarÖzet - Öğrenci Kayıt Sistemi8Çok Biçimlilik
Derleme ve Çalışma Zamanı Çok BiçimliliğiFonksiyon Aşırı YüklemeSanal Fonksiyonlara Yeniden BakışSaf Sanal FonksiyonlarSoyut SınıflarC++'ta Arayüz TasarımıDynamic Casting ve RTTIÖzet - Şekil Hesaplayıcı3Yapıcılar ve Yıkıcılar
Varsayılan YapıcıParametreli YapıcıKopya YapıcıTaşıma YapıcısıYapıcı İlklendirme ListeleriTemsilci YapıcılarYıkıcılara Derinlemesine BakışÜç / Beş / Sıfır KuralıÖzet - String Sınıfı6Operatör Aşırı Yükleme
Operatör Aşırı Yüklemeye GirişAritmetik Operatör Aşırı YüklemeKarşılaştırma Operatörü Aşırı YüklemeStream OperatörleriAtama Operatörü Aşırı Yükleme[] ve () Operatör Aşırı YüklemeTip Dönüşüm OperatörleriÖzet - Matris Sınıfı9Şablonlar
Fonksiyon ŞablonlarıSınıf ŞablonlarıŞablon ÖzelleştirmeVariadic ŞablonlarSFINAE ve Type Traits TemelleriÖzet - Generic Konteyner