Object-Oriented Programming Laboratuvar 11 19.12.2017 We use abstract class Employee to represent the general concept of an employee. The classes that derive directly from Employee are SalariedEmployee and CommissionEmployee. BasePlusCommissionEmployee is derived from CommissionEmployee and represents the last employee type. Write definitions of the four classes and the overridden methods (earnings and print) according to the table. earnings print Employee = 0 firstname lastname social security number: SSN SalariedEmployee weeklysalary salaried employee: firstname lastname social security number: SSN weekly salary: weeklysalary CommissionEmployee commissionrate* commission employee: firstname lastname grosssales social security number: SSN gross sales: grosssales commission rate: commissionrate BasePlusCommissionEmployee (commissionrate* base-salaried commission employee: firstname lastname grosssales)+ social security number: SSN basesalary gross sales: grosssales commissiton rate: commissionrate base salary: basesalary 1. çokbiçimli Employee (Calisan) sınıfları Bir çalışanın genel temsilini yapmak için soyut (abstract) Employee sınıfını kullanılsın. Employee sınıfından SalariedEmployee (MaasliCalisan) ve CommissionEmployee (KomisyonluCalisan) sınıfları türetilsin. BasePlusCommissionEmployee (MaasliKomisyonlıCalisan), CommissionEmployee sınıfından türetilen diğer bir çalışan sınıfı olsun. Bu 4 sınıfı ve override edilmiş (earnings (kazanç) ve print) metotlarını tabloya göre tanımlayın. Örnek program: 3 farklı class tan birer çalışan tanımlayın. 8 hafta sonra, her bir çalışana ödenen toplam ücreti ve çalışanlara ödenen toplam ücreti hesaplayın ve ekranda gösterin. Komisyonlu çalışanların o haftaki satış miktarını kullanıcıdan girmesini isteyebilirsiniz.
#ifndef EMPLOYEE_H #define EMPLOYEE_H #define NAME_LEN 32 #define SSN_LEN 10 class Employee public: Employee(void); virtual double earnings(void) = 0; virtual void print(void) const; protected: char firstname[name_len+1]; // +1 is for NULL character. char lastname[name_len+1]; // +1 is for NULL character. char SSN[SSN_LEN+1]; // +1 is for NULL character. ; #endif // EMPLOYEE_H #include "Employee.h" #include <iostream> #include <cstring> using std::cin; Employee::Employee(void) char buffer[128]; cout << "enter first name: "; cin >> buffer; strncpy(firstname, buffer, NAME_LEN); firstname[name_len] = '\0'; cout << "enter last name: "; cin >> buffer;
strncpy(lastname, buffer, NAME_LEN); lastname[name_len] = '\0'; cout << "enter social security number: "; cin >> buffer; strncpy(ssn, buffer, SSN_LEN); SSN[SSN_LEN] = '\0'; void Employee::print(void) const cout << "employee: " << firstname << " " << lastname << endl << "social security number: " << SSN << endl << endl; return; #ifndef SALARIEDEMPLOYEE_H #define SALARIEDEMPLOYEE_H #include "Employee.h" class SalariedEmployee : public Employee public: SalariedEmployee(void); double earnings(void); /* SalariedEmployee'den turetecegimiz baska bir class yok. * o sebeple virtual olmasina gerek yok. void print(void) const; /* SalariedEmployee'den turetecegimiz baska bir class yok. * o sebeple virtual olmasina gerek yok. protected: double weeklysalary; ; #endif // SALARIEDEMPLOYEE_H #include "SalariedEmployee.h"
#include <iostream> using std::cin; SalariedEmployee::SalariedEmployee(void) : Employee() cout << "enter weekly salary: "; cin >> weeklysalary; double SalariedEmployee::earnings(void) return weeklysalary; void SalariedEmployee::print(void) const cout << "salaried employee: " << firstname << " " << lastname << endl << "social security number: " << SSN << endl << "weekly salary: " << weeklysalary << endl; return; #ifndef COMMISSIONEMPLOYEE_H #define COMMISSIONEMPLOYEE_H #include "Employee.h" class CommissionEmployee : public Employee public: CommissionEmployee(void); virtual double earnings(void); /* CommissionEmployee'den BasePlusCommissionEmployee turetilecek. * o sebeple earnings metodunu, derived class'ta redefine edebilmek icin virtual. virtual void print(void)const; /* CommissionEmployee'den BasePlusCommissionEmployee turetilecek.
; protected: double commissionrate; double grosssales; * o sebeple print metodunu, derived class'ta redefine edebilmek icin virtual. #endif // COMMISSIONEMPLOYEE_H #include "CommissionEmployee.h" #include <iostream> using std::cin; CommissionEmployee::CommissionEmployee(void) : Employee() cout << "enter commission rate: "; cin >> commissionrate; grosssales = 0; double CommissionEmployee::earnings(void) cout << "commission employee: " << firstname << " " << lastname << endl << "enter gross sales: "; cin >> grosssales; return grosssales * commissionrate; void CommissionEmployee::print(void) const cout << "commission employee: " << firstname << " " << lastname << endl << "social security number: " << SSN << endl << "commission rate: " << commissionrate << endl << "gross sales: " << grosssales << endl; return; #ifndef BASEPLUSCOMMISSIONEMPLOYEE_H #define BASEPLUSCOMMISSIONEMPLOYEE_H
#include "CommissionEmployee.h" class BasePlusCommissionEmployee : public CommissionEmployee public: BasePlusCommissionEmployee(void); double earnings(void); /* BasePlusCommissionEmployee'den turetecegimiz baska bir class yok. * o sebeple virtual olmasina gerek yok. void print(void) const; /* BasePlusCommissionEmployee'den turetecegimiz baska bir class yok. * o sebeple virtual olmasina gerek yok. protected: double basesalary; ; #endif // BASEPLUSCOMMISSIONEMPLOYEE_H #include "BasePlusCommissionEmployee.h" #include <iostream> using std::cin; BasePlusCommissionEmployee::BasePlusCommissionEmployee(void) : CommissionEmployee() cout << "enter base salary: "; cin >> basesalary; double BasePlusCommissionEmployee::earnings(void) cout << "base plus commission employee: " << firstname << " " << lastname << endl << "enter gross sales: "; cin >> grosssales; return grosssales * commissionrate + basesalary; void BasePlusCommissionEmployee::print(void) const
cout << "base plus commission employee: " << firstname << " " << lastname << endl << "social security number: " << SSN << endl << "commission rate: " << commissionrate << endl << "gross sales: " << grosssales << endl << "base salaary: " << basesalary << endl; return; #include "Employee.h" #include "SalariedEmployee.h" #include "CommissionEmployee.h" #include "BasePlusCommissionEmployee.h" #include <iostream> int main(void) SalariedEmployee e1; CommissionEmployee e2; BasePlusCommissionEmployee e3; Employee *eptrarr[] = &e1, &e2, &e3; double totalpayments[] = 0, 0, 0 ; int wlpr, elpr; for(wlpr=0; wlpr < 4; wlpr++) cout << "week: " << wlpr+1 << endl; for(elpr=0; elpr < 3; elpr++) totalpayments[elpr] += eptrarr[elpr]->earnings(); for(elpr=0; elpr<3; elpr++)
eptrarr[elpr]->print(); cout << "total payment: " << totalpayments[elpr] << endl << endl; return 0;