Ad Soyad: İmza: Object-Oriented Programming Quiz 4 60dk. Kapalı kitap. Kapalı defter. Kapalı cep telefonu. Hesap makinesi yok. 21.12.2018 1. (30 puan) Aşağıda, aralarında herhangi bir kalıtım (inheritance) ilişkisi bulunmayan StdKargo ve HizliKargo class larının UML diyagramları verilmiştir. Bu iki class ın ortak özelliklerini birleştiren, abstract bir Kargo class ını tasarlayın. Paket class ını yazdıktan sonra StdKargo ve HizliKargo class larını, üyelerinde gerekli değişiklikleri de yaparak Kargo class ından türeyecek şekilde yeniden yazın. StdKargo -gonderen:char[256] -alici:char[256] -hacim:double +<<constructor>>(g:char*, a:char*, h:double) +getgonderen() const:const char* +getalici() const:const char* +gethacim() const:double +ucret() const:double // ücreti 2*hacim olarak hesaplar. HizliKargo -gonderen:char[256] -alici:char[256] -hacim:double -mesafe:double +<<constructor>>(g:char*, a:char*, h:double, m:double) +getgonderen() const:const char* +getalici() const:const char* +gethacim() const:double +getmesafe() const:double +ucret() const:double // ücreti 3*hacim + 0.25*mesafe olarak hesaplar. #ifndef KARGO_H #define KARGO_H class Kargo char gonderen[256]; char alici[256]; double hacim; Kargo(char*g, char*a, double h); const char* getgonderen(void) const; const char* getalici(void) const; double gethacim(void) const; virtual double ucret(void) const = 0;
#endif // KARGO_H #include "Kargo.h" #include <cstring> Kargo::Kargo(char*g, char*a, double h) strncpy(this->gonderen, g, 256); this->gonderen[256] = '\0'; strncpy(this->alici, g, 256); this->alici[256] = '\0'; this->hacim = h; const char* Kargo::getGonderen(void) const return this->gonderen; const char* Kargo::getAlici(void) const return this->alici; double Kargo::getHacim(void) const return this->hacim; #ifndef STD_KARGO_H #define STD_KARGOH #include "Kargo.h" class StdKargo : public Kargo StdKargo(char*g, char*a, double h); double ucret(void) const; #endif // STD_KARGO_H #include "StdKargo.h" StdKargo::StdKargo(char*g, char*a, double h) : Kargo(g, a, h)
double StdKargo::ucret() const return 2*this->getHacim(); #ifndef HIZLI_KARGO_H #define HIZLIK_KARGO_H #include "StdKargo.h" class HizliKargo : public Kargo double mesafe; HizliKargo(char*g, char*a, double h, double m); double getmesafe(void) const; double ucret(void) const; #endif // HIZLI_KARGO_H #include "HizliKargo.h" HizliKargo::HizliKargo(char*g, char*a, double h, double m) : Kargo(g, a, h) this->mesafe = m; double HizliKargo::getMesafe(void) const return this->mesafe; double HizliKargo::ucret(void) const return 3*this->getHacim() + 0.25*this->getMesafe();
2. (70 puan) Aşağıda verilen UML diyagramında yer alan BasePlusCommissionEmployee class ı (.h) ve bu class a ait metodların tanımlarını (.cpp) yazınız. Employee -firstname:char[33] -lastname:char[33] -SSN:char[11] +<<constructor>>(fn:char*, ln:char*, ssn:char*) +get_first_name() const:const char* +get_last_name() const:const char* +get_ssn() const:const char* SalariedEmployee -weeklysalary:double +<<constructor>>(fn:char*, ln:char*, ssn:char*, ws:double) CommissionEmployee -commissionrate:double -grosssales:double +<<constructor>>(fn:char*, ln:char*, ssn:char*, cr:double) +get_commission_rate() const:double +get_gross_sales() const:double +set_gross_sales(gs:double) BasePlusCommissionEmployee -basesalary:double +<<constructor>>(fn:char*, ln:char*, ssn:char*, cr:double, bs:double)
#ifndef BASEPLUSCOMMISSIONEMPLOYEE_H #define BASEPLUSCOMMISSIONEMPLOYEE_H #include "CommissionEmployee.h" class BasePlusCommissionEmployee : public CommissionEmployee BasePlusCommissionEmployee(char*fn, char*ln, char*ssn, double cr, double bs); double earnings(void); void print(void) const; double basesalary; #endif // BASEPLUSCOMMISSIONEMPLOYEE_H #include "BasePlusCommissionEmployee.h" #include <iostream> using std::cin; using std::cout; using std::endl; BasePlusCommissionEmployee::BasePlusCommissionEmployee(char*fn, char*ln, char*ssn, double cr, double bs) : CommissionEmployee(fn, ln, ssn, cr) basesalary = bs; double BasePlusCommissionEmployee::earnings(void) double temp; cout << "base plus commission employee: " << get_first_name() << " " << get_last_name() << endl << "enter gross sales: "; cin >> temp; set_gross_sales(temp); return get_gross_sales() * get_commission_rate() + basesalary; void BasePlusCommissionEmployee::print(void) const cout << "base plus commission employee: " << get_first_name() << " " << get_last_name() << endl << "social security number: " << get_ssn() << endl << "commission rate: " << get_commission_rate() << endl << "gross sales: " << get_gross_sales() << endl << "base salaary: " << basesalary << endl; return;