Nemzetközi vadásztársaság

Egy nemzetközi vadásztársaságnál különféle állatokra (Animal) lehet vadászni, így nyulakra (Rabbit), jegesmedvékre (PolarBear), valamint mókusokra (Squirrel). Mindegyiknek különböző értékű a prémje, egy alapegység egy konstans a Hunter névtérben (basePrice=100000), a nyúlprém ennek konstansszorosa (rabbitFactor=0.3), míg a jegesmedve esetében ez a tényező polarBearFactor=2.4, a mókusnál squirrelFactor=1.2. Programunk egy tömbben tartja nyilván az elejtett állatokat. A célunk kiszámolni és kiírni az egyes állatok prémjének értékét (getPrice()).

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 összeget lekérdező függvény (getPrice) deklarációját és láthatóságát! Ügyeljen az elegáns OO megoldásokra! Implementálja a névteret, az osztályokat és konstansokat, figyelve arra, hogy esetlegesen egyes konstansokat is tagváltozókként érdemes implementálni. Egy új zsákmányállat-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 a három különböző típusú állat felvételét, valamint kiírja a nevüket és a prémjük árát.



A megoldásért kattints ide!




//Hunter.h
#ifndef __HUNTER_H
#define __HUNTER_H

#include <iostream>


namespace Hunter {

  class Animal {
    protected:
      static const double basePrice;

    public:
      virtual double getPrice() const = 0;
      virtual void print() const = 0;
  };


  class Rabbit: public Animal {
      static const double rabbitFactor;

    public:
      double getPrice() const {
        return basePrice * rabbitFactor;
      }

      void print() const {
        std::cout << "The price of a rabbit is $" << getPrice() << std::endl;
      }
  };


  class PolarBear: public Animal {
      static const double polarBearFactor;

    public:
      double getPrice() const {
        return basePrice * polarBearFactor;
      }

      void print() const {
        std::cout << "The price of a polar bear is $" << getPrice() << std::endl;
      }
  };


  class Squirrel: public Animal {
      static const double squirrelFactor;

    public:
      double getPrice() const {
        return basePrice * squirrelFactor;
      }

      void print() const {
        std::cout << "The price of a squirrel is $" << getPrice() << std::endl;
      }
  };

}

#endif // __HUNTER_H



 

// Hunter.cpp
#include "Hunter.h"

namespace Hunter {

  const double Animal::basePrice = 100000;
  const double Rabbit::rabbitFactor = 0.3;
  const double PolarBear::polarBearFactor = 2.4;
  const double Squirrel::squirrelFactor = 1.2;

}



 

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


int main() {
  Animal *P[3];
  P[0] = new Rabbit();
  P[1] = new Squirrel();
  P[2] = new PolarBear();


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

  return 0;
}

gif hunter.gif (9 kB)




2008.01.05. 11:07:53 |  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