## Linux compilation > mkdir build > cd build > cmake -DCMAKE_BUILD_TYPE=Debug .. > make ## Exercise 1 * Go into directory *Core* and implement *Time* and *TimeObserver* class * Class *Time* should have 4 methods: * void attach(TimeObserver* observer); -> attach observer * void detach(TimeObserver* observer); -> detach observer * Time& operator++(); -> increment day and notify observers * size_t day() const; -> return current day * Go into directory *Ship* and make *Ship* class inherit from *TimeObserver* * Each time the observer will be triggered, you should give the crew food and drink * Each crew member should consume **1** rum and **1** banana (I know they usually eat biscuits) * If you don't have enough cargo crew should rebel * Each day of a rebel you should subtract **5** members of the crew * If the number of crew drops below **0**, throw an exception "Game Over" Example (We have 40 members of crew): Day: 0 crew: 40 |----------------|----------------| | NAME | AMOUNT | |----------------|----------------| |Rum | 300 | |Banana | 200 | |Banana | 150 | |----------------|----------------| DAY: 1 crew: 40 |----------------|----------------| | NAME | AMOUNT | |----------------|----------------| |Rum | 260 | |Banana | 160 | |Banana | 150 | |----------------|----------------| DAY: 2 crew: 40 |----------------|----------------| | NAME | AMOUNT | |----------------|----------------| |Rum | 220 | |Banana | 120 | |Banana | 150 | |----------------|----------------| DAY: 3 crew: 40 |----------------|----------------| | NAME | AMOUNT | |----------------|----------------| |Rum | 180 | |Banana | 80 | |Banana | 150 | |----------------|----------------| DAY: 4 crew: 40 |----------------|----------------| | NAME | AMOUNT | |----------------|----------------| |Rum | 140 | |Banana | 40 | |Banana | 150 | |----------------|----------------| DAY: 5 crew: 40 |----------------|----------------| | NAME | AMOUNT | |----------------|----------------| |Rum | 100 | |Banana | 150 | |----------------|----------------| DAY: 6 crew: 40 |----------------|----------------| | NAME | AMOUNT | |----------------|----------------| |Rum | 60 | |Banana | 110 | |----------------|----------------| DAY: 7 crew: 40 |----------------|----------------| | NAME | AMOUNT | |----------------|----------------| |Rum | 20 | |Banana | 70 | |----------------|----------------| ********** Crew rebel ********** DAY: 8 crew: 35 |----------------|----------------| | NAME | AMOUNT | |----------------|----------------| |Banana | 30 | |----------------|----------------| ********** Crew rebel ********** DAY: 9 crew: 30 |----------------|----------------| | NAME | AMOUNT | |----------------|----------------| |----------------|----------------| ********** Crew rebel ********** DAY: 10 crew: 25 |----------------|----------------| | NAME | AMOUNT | |----------------|----------------| |----------------|----------------| ## Exercise 2 * Go into directory *Store* and make *Store* class inherit from *TimeObserver* * Class *Store* should don't know anything about class *Time* * We should attach and detach observer outside of class. Think about how you can make it exception-safe (RAII) * Each time the observer will be triggered, you should change the number of available cargo in the store * Each time draw a number between -50 and 50 and add it to the amount of cargo * Print everyday cargo from the Shop and verify if the amount changes ## Exercise 3 * Rewrite Observer to use modern approach -> by value semantic. * Rewrite class Ship * Rewrite class Store * Question: Which class was easier to rewrite?