Advertisement
Guest User

Untitled

a guest
Jan 16th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.76 KB | None | 0 0
  1. #ifndef CHRISTMASTREE_HELPER_H
  2. #define CHRISTMASTREE_HELPER_H
  3.  
  4. #include <iostream>
  5. #include <random>
  6. #include <cassert>
  7.  
  8. /**
  9.  * Deklaracje klas potrzebne do stworzenia obiektow z person.h i decoration.h
  10.  */
  11. class Decoration;
  12. class ChristmasTree;
  13. class Person;
  14.  
  15. /**
  16.  * Funkcja zwracajaca losowe liczby, jednakowe dla kazdego wywolania programu
  17.  * @return losowy, ale powtarzalna liczba z zakresu range_from do range_to
  18.  */
  19. int randomNumber();
  20.  
  21. /**
  22.  * Klasa-opakowanie typu integer z funkcjami do obliczen pienieznych
  23.  */
  24. class Price {
  25.     int pln_;
  26.  
  27. public:
  28.     /**
  29.      * Konstruktor inicjowany wartoscia typu int
  30.      * @param pln - pieniadze poczatkowe
  31.      */
  32.     explicit Price(int pln = 0) : pln_(pln) {}
  33.  
  34.     /**
  35.      * Operator dodawania
  36.      * @param lhv - podawany przez wartosc, by optymalizowac operacje typu
  37.      * a + b + c
  38.      * @param rhv - podawany jako stala referencja
  39.      * @return lhv += rhv
  40.      */
  41.     friend Price operator+(Price lhv, const Price& rhv) {
  42.         lhv.pln_ += rhv.pln_;
  43.         return lhv;
  44.     }
  45.  
  46.     /**
  47.      * Operator -=
  48.      * @param other - wartosc o ktora zmniejsza sie cena
  49.      * @return referencja na zmieniony obiekt
  50.      */
  51.     Price& operator-=(const Price&);
  52.  
  53.     /**
  54.      * Operator porownania, porownuje pole pln_
  55.      * @param other
  56.      * @return this->pln_ < other->pln_
  57.      */
  58.     bool operator<(const Price&) const;
  59.  
  60.     /**
  61.      * Wypisuje "pln_ PLN"
  62.      * @param stream - wyjscie (domyslnie standardowe)
  63.      * @param price
  64.      * @return referencja na podane wyjscie
  65.      */
  66.     friend std::ostream& operator<<(std::ostream& stream, const Price& price) {
  67.         return stream << price.pln_ << " PLN";
  68.     }
  69. };
  70.  
  71. /**
  72.  * Klasa odpowiadajaca za obsługe dat wraz z godzina (czas) ograniczonych do
  73.  * miesiaca grudzien.
  74.  */
  75. class Date {
  76.     int day_;
  77.     int hour_;
  78.     int minute_;
  79.  
  80. public:
  81.     /**
  82.      * Nie mozna stworzyc daty bez podania parametrow
  83.      */
  84.     Date() = delete;
  85.  
  86.     /**
  87.      * Konstruktor klasy Date. Sprawdza, czy podana data pasuje do grudnia.
  88.      * @param day
  89.      * @param hour
  90.      * @param minute
  91.      */
  92.     explicit Date(int day, int hour, int minute);
  93.  
  94.     /**
  95.      * Operator preinkrementacji. Zwieksza minute o 1. Sprawdza, czy data nie
  96.      * wyszla poza grudzien.
  97.      * @return referencja na zmodyfikowany obiekt
  98.      */
  99.     Date& operator++();
  100.  
  101.     /**
  102.      * Operator porownania, porownuje przez wyliczenie minut kazdej z dat
  103.      * @param other
  104.      * @return this < other
  105.      */
  106.     bool operator<(const Date& other) const;
  107.  
  108.     /**
  109.      * Operator odejmowania, zwraca wartosc bezwzgledna roznicy czasow w minutach
  110.      * @param lhw - lewa wartosc
  111.      * @param rhw - prawa wartosc
  112.      * @return roznica czasow w minutach typu int
  113.      */
  114.     friend int operator-(const Date& lhv, const Date& rhv) {
  115.         return ((lhv.day_ - rhv.day_) * 24 + (lhv.hour_ - rhv.hour_)) * 60 +
  116.                (lhv.minute_ - rhv.minute_);
  117.     }
  118.  
  119.     /**
  120.      * Operator wypisania do strumienia
  121.      * @param stream - strumien, domyslnie std::cout
  122.      * @return December, day_, hour_:minute_
  123.      */
  124.     friend std::ostream& operator<<(std::ostream& stream, const Date& date) {
  125.         std::string min = (date.minute_ < 10)
  126.                           ? ("0" + std::to_string(date.minute_))
  127.                           : std::to_string(date.minute_);
  128.         return stream << "December, " << date.day_ << ", " <<
  129.                       date.hour_ << ':' << min;
  130.     }
  131. };
  132.  
  133. /**
  134.  * Funkcja zwracajaca obecna date, poczatkowo majaca wartosc 18 grudnia 16:00
  135.  * @return obecna data
  136.  */
  137. Date& currentDate();
  138.  
  139. class Observer {
  140. public:
  141.     virtual void reaction(ChristmasTree& cht) const = 0;
  142. };
  143.  
  144. #endif //CHRISTMASTREE_HELPER_H
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement