Rangkuman: Hierarki Karyawan
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 55 dari 104.
Tantangan
MudahMari kita buat sistem hierarki karyawan lengkap yang menggabungkan semua konsep pewarisan yang telah kamu pelajari di bab ini. Kamu akan membuat struktur perusahaan dengan berbagai jenis karyawan yang memiliki atribut umum, tetapi perilakunya khusus.
Kamu akan mengatur kodemu dalam empat file:
Employee.h: Definisikan class dasarEmployeeyang akan menjadi induk bagi semua jenis karyawan. Setiap karyawan memiliki nama, ID, dan gaji pokok. Sertakan:- Anggota protected untuk nama (
std::string), id (int), dan baseSalary (double) - Konstruktor yang menginisialisasi ketiga nilai
- method virtual
displayInfo()yang mencetak:Employee: <name> (ID: <id>) - method virtual
calculateSalary()yang mengembalikan gaji pokok - Destruktor virtual
- Anggota protected untuk nama (
Manager.h: Definisikan classManageryang mewarisiEmployeesecara publik. Manager menerima bonus berdasarkan ukuran tim:- Anggota
int teamSizeyang bersifat private - Konstruktor yang menerima nama, id, gaji pokok, dan ukuran tim: teruskan argumen dengan benar ke konstruktor dasar
- Timpa
displayInfo()agar mencetak:Manager: <name> (ID: <id>) - Team of <teamSize> - Timpa
calculateSalary()agar mengembalikan gaji pokok ditambah 500 untuk setiap anggota tim
- Anggota
Developer.h: Definisikan classDeveloperyang mewarisiEmployeesecara publik. Developer memiliki bahasa pemrograman spesialisasi dan mendapat bonus keterampilan:- Anggota
std::string languageyang bersifat private - Konstruktor yang menerima nama, id, gaji pokok, dan bahasa pemrograman
- Timpa
displayInfo()agar mencetak:Developer: <name> (ID: <id>) - <language> - Timpa
calculateSalary()agar mengembalikan gaji pokok ditambah bonus keterampilan sebesar 1000
- Anggota
main.cpp: Baca enam input, masing-masing pada baris terpisah:- Nama Manager
- ID Manager
- Gaji pokok Manager
- Nama Developer
- ID Developer
- Gaji pokok Developer
Buat Manager dengan ukuran tim 4 dan Developer yang berspesialisasi dalam "C++". Simpan pointer ke keduanya dalam sebuah array berisi pointer
Employee*. Lakukan perulangan pada array untuk memanggildisplayInfo()dan mencetak gaji yang dihitung untuk setiap karyawan dengan format berikut:<displayInfo output> Salary: $<calculated salary>Cetak satu baris kosong di antara karyawan. Setelah menampilkan semua karyawan, hapus object yang dialokasikan secara dinamis dengan benar.
Contohnya, dengan input Sarah, 101, 5000, Mike, 102, dan 4500:
Manager: Sarah (ID: 101) - Team of 4
Salary: $7000
Developer: Mike (ID: 102) - C++
Salary: $5500Tantangan ini menunjukkan polimorfisme dalam praktik: pemanggilan method virtual melalui pointer class dasar akan menjalankan implementasi class turunan yang tepat. Ingat untuk menggunakan kata kunci override dan menyertakan destruktor virtual di class dasar agar pembersihan berjalan dengan benar.
Coba sendiri
#include <iostream>
#include <string>
#include "Employee.h"
#include "Manager.h"
#include "Developer.h"
using namespace std;
int main() {
// Baca input Manager
string managerName;
int managerId;
double managerSalary;
getline(cin, managerName);
cin >> managerId;
cin >> managerSalary;
cin.ignore();
// Baca input Developer
string developerName;
int developerId;
double developerSalary;
getline(cin, developerName);
cin >> developerId;
cin >> developerSalary;
// TODO: Buat Manager dengan ukuran tim 4
// TODO: Buat Developer yang ahli dalam "C++"
// TODO: Buat array pointer Employee* untuk menyimpan kedua karyawan
// TODO: Lakukan perulangan pada array dan untuk setiap karyawan:
// - Panggil displayInfo()
// - Cetak: Salary: $<gaji yang dihitung>
// - Cetak baris kosong di antara karyawan (jangan setelah karyawan terakhir)
// TODO: Hapus object yang dialokasikan secara dinamis
return 0;
}
Semua pelajaran di Pemrograman Berorientasi Object
1Dasar-Dasar OOP
File EksternalBuild dan Kompilasi C++File Header dan File SourceNamespace dan CakupanPengantar OOP dalam C++class vs objectPointer 'this'method (Fungsi Anggota)Atribut (Anggota Data)Dasar Ctor dan DtorRingkasan: Kalkulator Sederhana4Properti class
Anggota instance vs staticGetter dan setterFungsi anggota constKata kunci mutableMethod dan variabel staticFungsi dan class friendRangkuman, Pengelola Rekening Bank7Pewarisan
Pewarisan DasarTingkat Akses pada PewarisanUrutan Pemanggilan Ctor & DtorPenimpaan methodFungsi Virtual & VTablePewarisan BergandaPewarisan VirtualRangkuman: Hierarki Karyawan2Manajemen Memori
Memori Stack vs HeapPointer dan ReferenceMemori Dinamis (new/delete)Smart Pointer di C++RAII di C++Rangkuman: Pengelola Array Dinamis5Enkapsulasi
Penentu Akses dalam C++Penentu Akses secara MendalamPenyembunyian Informasistruct vs classNested dan Inner classRangkuman, Sistem Catatan Siswa8Polimorfisme
Polimorfisme saat Compile vs RuntimeOverloading FungsiMeninjau Kembali Fungsi VirtualFungsi Virtual MurniKelas AbstrakDesain Interface di C++Casting Dinamis & RTTIRangkuman: Kalkulator Bentuk3Konstruktor & Destruktor
Konstruktor DefaultKonstruktor BerparameterKonstruktor SalinKonstruktor PindahDaftar Inisialisasi KonstruktorKonstruktor DelegasiKupas Tuntas DestruktorAturan Tiga, Lima, dan NolRangkuman: class String6Overloading Operator
Pengantar Overloading OperatorOverloading Operator AritmetikaOverloading Operator PerbandinganOperator StreamOverloading Operator PenugasanOverloading Operator [] dan ()Operator Konversi TipeRingkasan, class Matrix9Template
Template FungsiTemplate classSpesialisasi TemplateTemplate VariadikDasar SFINAE & Type TraitsRangkuman, Container GenerikLatihan sendiri: Compiler C++ online