Madárgyűjtemény eszmei értéke

Madárgyűjteményünk háromféle madarat (Madar) tartalmaz: baglyot (Bagoly), papagájt (Papagaj) és vöcsköt (Vocsok). Mindegyik különböző eszmei értékű, az alapegység millió forintban egy statikus változója az alaposztálynak (alapÁr=50), a bagoly darabja ennek konstansszorosa (bagolySzorzo=0.03), míg a papagáj esetében ez a tényező papagajSzorzo=2.4, a vöcsöknél vocsokSzorzo=1.2. Programunk egy tömbben tartja nyilván a gyűjteményben található madarakat. A célunk kiszámolni az egyes madarak eszmei értékét (ertek()).

§         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 (ertek) 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 MadarGyujtemeny 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 madártí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ú madár felvételét, valamint kiírja a nevüket és árukat. (Pl.: Bagoly: 1.5 millió HUF)



A megoldásért kattints ide!







// Madar.h
#ifndef __MADAR_H
#define __MADAR_H

#include <iostream>


namespace MadarGyujtemeny {

  class Madar {
    protected:
      static const double alapAr;

    public:
      virtual double ertek() const = 0;
      virtual void kiir() const = 0;
  };


  class Bagoly: public Madar {
      static const double bagolySzorzo;

    public:
      double ertek() const {
        return alapAr * bagolySzorzo;
      }

      void kiir() const {
        std::cout << "A bagoly erteke $" << ertek() << std::endl;
      }
  };


  class Papagaj: public Madar {
      static const double papagajSzorzo;

    public:
      double ertek() const {
        return alapAr * papagajSzorzo;
      }

      void kiir() const {
        std::cout << "A papagaj erteke $" << ertek() << std::endl;
      }
  };


  class Vocsok: public Madar {
      static const double vocsokSzorzo;

    public:
      double ertek() const {
        return alapAr * vocsokSzorzo;
      }

      void kiir() const {
        std::cout << "A vocsok erteke $" << ertek() << std::endl;
      }
  };

}

#endif // __MADAR_H

 

// Madar.cpp
#include "Madar.h"

namespace MadarGyujtemeny {

  const double Madar::alapAr = 50;
  const double Bagoly::bagolySzorzo = 0.03;
  const double Papagaj::papagajSzorzo = 2.4;
  const double Vocsok::vocsokSzorzo = 1.2;

}

 

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


int main() {
  Madar *P[3];
  P[0] = new Bagoly();
  P[1] = new Papagaj();
  P[2] = new Vocsok();

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

  return 0;
}

 

 

gif madar.gif (9 kB)




2008.01.05. 11:26:22 |  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