Ö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 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ğı temelEmployeesı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ı
- Ad (
Manager.h:Managersınıfından public olarak kalıtım alan birEmployeesı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
- Özel bir
Developer.h:Developersınıfından public olarak kalıtım alan birEmployeesı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
- Özel bir
main.cpp: Altı girdi okuyun (her biri ayrı bir satırda):- Yönetici adı
- Yönetici kimliği
- Yöneticinin temel maaşı
- Geliştirici adı
- Geliştirici kimliği
- 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çindisplayInfo()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: $5500Bu 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
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 KonteynerKendi başına pratik yap: Online C++ derleyicisi