Vállalati alkalmazottak

Egy nagyvállalatnál alkalmazottak (Employee) dolgoznak, valamint osztályvezetők (DivisionManager), igazgatóhelyettesek (VicePresident) és egy vezérigazgató (President). Az alkalmazottak fizetése egy konstans (baseSalary=100000) a Multi névtérben, az vezetők fizetése ennek egy konstansszorosa (divisionManagerSalaryFactor=1.2, vicePresidentSalaryFactor=2, presidentSalaryFactor=10). Programunk ennek a vállalatnak a dolgozóit szeretné nyilvántartani egy tömbben. Célunk a tömbben található dolgozók fizetésének kiíratása.

  • Tervezze meg és vázolja fel az osztályok öröklési hierarchiáját! Az osztályok téglalapjaiban tüntesse fel a fizetést lekérdező függvény (getSalary) deklarációját és láthatóságát! Ügyeljen az elegáns OO megoldásokra!
  • Implementálja az osztályokat, figyelve arra, hogy esetlegesen egyes konstansokat is tagváltozókként érdemes implementálni. Az egyes alkalmazottaknak legyen neve (feltételezhet egy string osztályt), amit szintén nyilvántartunk, és az egységbezárás elveinek megfelelően biztosítjuk a tagváltozó érvényességét az objektum egész életciklusa folyamán. Egy új alkalmazott típus esetleges felvételéhez ne kelljen a már meglévő osztályokat módosítani!
  • Írjon egy egyszerű programrészletet nem dinamikus tömbbel, ami megmutatja négy különböző típusú alkalmazott felvételét, valamint kiírja a nevüket és a fizetésüket.


A megoldásért kattints ide!





// Company.h
#ifndef __COMPANY_H
#define __COMPANY_H

#include <string>

namespace Multi {

  class Employee {
    protected:
      static const double baseSalary;
      std::string name;

    public:
      Employee(const std::string &nm) {
        name = nm;
      }

      std::string getName() const {
        return name;
      }

      virtual double getSalary() const {
        return baseSalary;
      }
  };


  class DivisionManager: public Employee {
      static const double divisionManagerSalaryFactor;

    public:
      DivisionManager(const std::string &nm): Employee(nm) {
      }

      double getSalary() const {
        return baseSalary * divisionManagerSalaryFactor;
      }
  };


  class VicePresident: public Employee {
      static const double vicePresidentSalaryFactor;

    public:
      VicePresident(const std::string &nm): Employee(nm) {
      }

      double getSalary() const {
        return baseSalary * vicePresidentSalaryFactor;
      }
  };


  class President: public Employee {
      static const double presidentSalaryFactor;

    public:
      President(const std::string &nm): Employee(nm) {
      }

      double getSalary() const {
        return baseSalary * presidentSalaryFactor;
      }
  };

}

#endif // __COMPANY_H



// Company.cpp
#include "Company.h"

namespace Multi {

  const double Employee::baseSalary = 100000;
  const double DivisionManager::divisionManagerSalaryFactor = 1.2;
  const double VicePresident::vicePresidentSalaryFactor = 2;
  const double President::presidentSalaryFactor = 10;

}



// Main.cpp
#include <iostream>
#include "Company.h"
using namespace std;
using namespace Multi;


int main() {
  Employee *P[4];
  P[0] = new Employee("Joe");
  P[1] = new DivisionManager("Jack");
  P[2] = new VicePresident("Jane");
  P[3] = new President("Jim");

  for (int i = 0; i < 4; i++) {
    cout << "The salary of " << P[i]->getName() << " is " << P[i]->getSalary() << endl;
    delete P[i];
  }

  return 0;
}

gif company.gif (10 kB)




2008.01.05. 10:51:48 |  Permalink  |  Hozzászólások száma: 0  |  Tárgyszavak: Polimorfizmus


Írja meg Ön is véleményét!


Hozzászólásokat csak regisztrált, bejelentkezett felhasználóktól tudunk elfogadni!

Hozzászólások