Medvemenhely tartási költsége

Egy medvemenhelyen háromféle medvét (Bear) tartanak számon: grizzlit (Grizzly), pandát (Panda) és jegesmedvét (PolarBear). Mindegyiknek különböző a napi tartási költsége, létezik egy alapegység statikus változó Bear osztályban (basePrice=50), a panda tartása ennek konstansszorosa (pandaFactor=0.3), míg a grizzli esetében ez a tényező grizzlyFactor=2.4, a jegesmedvénél polarBearFactor=1.2. A menhelynek írt programunk egy tömbben tartja az érkezett állatokat. Az egyes medve osztályok tartalmazzák a menhelyen eltöltött napok számát. A célunk kiszámolni és kiírni az egyes medvék tartási költségét (getCost()).

Használja fel a dőlt betűs osztály-, függvény- és változóneveket! Ne legyen egy függvénytörzsben sem felesleges, nem használt kód! Tervezze meg és vázolja fel az osztályok öröklési hierarchiáját! Az osztályok téglalapjaiban tüntesse fel az költséget lekérdező függvény (getCost) deklarációját és láthatóságát! Ügyeljen az elegáns OO megoldásokra! Implementálja a Shelter névteret, az osztályokat és konstansokat, figyelve arra, hogy esetlegesen egyes konstansokat is tagváltozókként érdemes implementálni. Egy új medvetí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, amely megmutatja három különböző fajtájú medve felvételét, valamint kiírja az eddigi tartási költségüket.



A megoldásért kattints ide!





// Bear.h
#ifndef __BEAR_H
#define __BEAR_H

#include <iostream>


namespace Shelter {

  class Bear {
    protected:
      static const double basePrice;
      unsigned Days;

    public:
      Bear(unsigned d) {
        Days = d;
      }

      virtual double getCost() const = 0;
      virtual void print() const = 0;
  };


  class Grizzly: public Bear {
      static const double grizzlyFactor;

    public:
      Grizzly(unsigned d): Bear(d) {
      }

      double getCost() const {
        return Days * basePrice * grizzlyFactor;
      }

      void print() const {
        std::cout << "Feeding a grizzly for " << Days << " days will cost $" << getCost() << std::endl;
      }
  };


  class Panda: public Bear {
      static const double pandaFactor;

    public:
      Panda(unsigned d): Bear(d) {
      }

      double getCost() const {
        return Days * basePrice * pandaFactor;
      }

      void print() const {
        std::cout << "Feeding a panda for " << Days << " days will cost $" << getCost() << std::endl;
      }
  };


  class PolarBear: public Bear {
      static const double polarBearFactor;

    public:
      PolarBear(unsigned d): Bear(d) {
      }

      double getCost() const {
        return Days * basePrice * polarBearFactor;
      }

      void print() const {
        std::cout << "Feeding a polar bear for " << Days << " days will cost $" << getCost() << std::endl;
      }
  };

}

#endif // __BEAR_H

 

// Bear.cpp
#include "Bear.h"

namespace Shelter {

  const double Bear::basePrice = 50;
  const double Grizzly::grizzlyFactor = 2.4;
  const double Panda::pandaFactor = 0.3;
  const double PolarBear::polarBearFactor = 1.2;

}

 

// Main.cpp
#include <iostream>
#include "Bear.h"
using namespace std;
using namespace Shelter;


int main() {
  Bear *P[3];
  P[0] = new Grizzly(22);
  P[1] = new Panda(51);
  P[2] = new PolarBear(43);

  for (int i = 0; i < 3; i++) {
  P[i]->print();
    delete P[i];
  }

  return 0;
}

 

gif bear.gif (11 kB)




2008.01.05. 11:29:00 |  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