Mikulás járművei

A Mikulás az alábbi járműveket (Vehicle) veszi igénybe: rénszarvas (ReindeerSleigh), kutyaszán (HuskySledge), és a melegebb országokban lovas szán (HorseSledge). Mindegyik évi fenntartási költsége különböző, egy alapegység egy konstans a SantaClaus névtérben (basePrice=50), a rénszarvasé ennek konstansszorosa (reindeerFactor=1000), míg kutyák esetében ez a tényező huskyFactor=50, a lovaknál horseFactor=60. A Mikulásnak írt programunk egy tömbben tartja nyilván a Mikulás járműparkját. A célunk kiszámolni és kiírni a járműpark éves fenntartásának árát eszközönként (getPrice()) és együtt.

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 jármű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 három különböző típusú jármű felvételét, valamint kiírja a nevüket és árukat.



A megoldásért kattints ide!

 

 

// Santa.h
#ifndef __SANTA_H
#define __SANTA_H

#include <iostream>


namespace SantaClaus {

  class Vehicle {
    protected:
      static const double basePrice;

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


  class ReindeerSleigh: public Vehicle {
      static const double reindeerFactor;

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

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


  class HuskySledge: public Vehicle {
      static const double huskyFactor;

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

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


  class HorseSledge: public Vehicle {
      static const double horseFactor;

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

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

}

#endif // __SANTA_H

 

// Santa.cpp
#include "Santa.h"

namespace SantaClaus {

  const double Vehicle::basePrice = 50;
  const double ReindeerSleigh::reindeerFactor = 1000;
  const double HuskySledge::huskyFactor = 50;
  const double HorseSledge::horseFactor = 60;

}

 

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


int main() {
  Vehicle *P[3];
  P[0] = new ReindeerSleigh();
  P[1] = new HuskySledge();
  P[2] = new HorseSledge();

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

  return 0;
}

 

gif santa.gif (9 kB)




2008.01.05. 11:15:04 |  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