Húsvéti Nyúl ajándékai

. A Húsvéti Nyúl háromfajta ajándékot (Present) oszt: tojást (Egg), csokit (Chocolate) és cukrot (Candy). Mindegyik különböző értékű, az alapegység egy statikus változója az alaposztálynak (basePrice=50), a tojás darabja ennek konstansszorosa (eggFactor=0.3), míg a csoki esetében ez a tényező chocolateFactor=2.4, a cukornál candyFactor=1.2. A Nyúlnak írt programunk egy tömbben tartja nyilván a kiosztott ajándékokat. Az egyes ajándékok darabszámot is tartalmaznak. A célunk kiszámolni és kiírni az egyes ajándékok értékét (getPrice()).

§         Tervezze meg és vázolja fel az osztályok öröklési hierarchiáját! Használja fel a fenti dőlt betűs osztály-, függvény- és változóneveket! 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 az osztályokat és konstansokat az EasterBunny névtérben figyelve arra, hogy esetlegesen egyes konstansokat is tagként vagy statikus tagként érdemes implementálni. Ne legyen egy függvénytörzsben sem felesleges, nem használt kód! Egy új ajándéktí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 három különböző típusú ajándék felvételét, valamint kiírja a nevüket és árukat.



A megoldásért kattints ide!







// Bunny.h
#ifndef __BUNNY_H
#define __BUNNY_H

#include <iostream>


namespace EasterBunny {

  class Present {
    protected:
      static const double basePrice;
      unsigned Quantity;

    public:
      Present(unsigned Q) {
        Quantity = Q;
      }

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


  class Egg: public Present {
      static const double eggFactor;

    public:
      Egg(unsigned Q): Present(Q) {
      }

      double getPrice() const {
        return Quantity * basePrice * eggFactor;
      }

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


  class Chocolate: public Present {
      static const double chocolateFactor;

    public:
      Chocolate(unsigned Q): Present(Q) {
      }

      double getPrice() const {
        return Quantity * basePrice * chocolateFactor;
      }

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


  class Candy: public Present {
      static const double candyFactor;

    public:
      Candy(unsigned Q): Present(Q) {
      }

      double getPrice() const {
        return Quantity * basePrice * candyFactor;
      }

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

}

#endif // __BUNNY_H

 

// Bunny.cpp
#include "Bunny.h"

namespace EasterBunny {

  const double Present::basePrice = 50;
  const double Egg::eggFactor = 0.3;
  const double Chocolate::chocolateFactor = 2.4;
  const double Candy::candyFactor = 1.2;

}

 

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


int main() {
  Present *P[3];
  P[0] = new Egg(5);
  P[1] = new Chocolate(12);
  P[2] = new Chocolate(7);

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

  return 0;
}

 

gif bunny.gif (11 kB)




2008.01.05. 11:19:37 |  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