Zadání zápočtového příkladu: Program bude simulovat uskladnění a prodej zboží v obchodu se zimním vybavením. Zboží bude mít čistě abstraktní rozhraní, které umožňuje získat jeho název a cenu. Obchod neví, s jakým typem zboží zrovna pracuje, stačí mu rozhraní obecného zboží. Zboží je dvojího typu: lyže a lyžařské boty. Lyže jsou vždy nové, ale lyžařské boty jsou buď nové, nebo bazarové. To, jestli jsou lyžařské boty nové, nebo bazarové se vypíše v názvu zboží přidáním textu: „ - new“ nebo „ - second-hand“ za název zboží. Obchod má 3 funkce: uskladňuje zboží, vypisuje seznam zboží (vždy název a cenu) a prodává zboží. Program otestuje funkcionalitu tak, že v mainu vytvoří 5 lyží (párů lyží), 5 lyžařských bot (párů bot) nových a 5 lyžařských bot (párů bot) bazarových. Všechno vytvořené zboží uskladní do obchodu. Vypíše seznam zboží v obchodě. Prodá z obchodu 10 kusů zboží (náhodně) a pak znovu vypíše seznam zboží v obchodě. Funkční požadavky: - Program zavede vhodně čistě abstraktní rozhraní definující zboží (Product) s metodami vhodnými pro provedení získání názvu zboží (std::string) a ceny zboží (float). - Program deklaruje dva konkrétní typy zboží: lyže (Skis) a lyžařské boty (SkiBoots). Obě dvě třídy budou nastavovat název lyží / lyžařských bot v parametrickém konstruktoru. Třída SkiBoots bude navíc mít jako druhý parametr konstruktoru hodnotu „new“ nebo „second-hand“ pro rozlišení, jedná-li se o nové nebo bazarové lyžařské boty. Doporučený typ tohoto druhého parametru je enum namísto bool. - Program deklaruje třídu pro obchod (Shop), která bude mít 3 metody: Metoda „stock“, která bere jako parametr zboží, které uskladní (uloží do vhodného kontejneru dané třídy). Metoda „print_products“, která vypisuje seznam zboží ve formátu „název: , cena: “. Metoda „sell“, která bere jako parametr celé číslo udávající množství zboží, co se má prodat. Prodá se náhodné zboží v obchodě v daném počtu (je-li zboží méně, prodá se tolik, kolik ho je). Otestování funkcionality v mainu: - Program vytvoří dynamicky 5 objektů lyží (Skis), 5 objektů lyžařských bot (SkiBoots) nových a 5 objektů lyžařských bot (SkiBoots) bazarových. Možné názvy lyží: běžecké, sjezdové, slalomové, skokanské, pro rychlostní lyžování, trikové. Názvy lyžařských bot mohou být rozděleny zase podle typů užití, nebo velikosti boty. - Program vytvoří instanci obchodu (Shop) a všechno vytvořené zboží do ní uskladní. - Program po uskladnění zboží vypíše seznam zboží v obchodě. - Program prodá z obchodu 10 kusů zboží (náhodně, nebo v libovolném pořadí). - Program po prodeji zboží vypíše seznam zboží v obchodě. Formální požadavky: - Použijte vhodně virtuální metody a dědičnost. - Použijte vhodně konstantní metody. - Použijte vhodně konstruktory. - Použijte vhodný STL kontejner na uchování objektů zboží. - Objekty zboží jsou alokovány dynamicky. Obchod pracuje s objekty prostřednictvím jejich společného rozhraní. - Vytvořte main, který demonstruje použití navržené hierarchie. - Budou dodržovány zásady zapouzdření a dobrých programovacích postupů (korektní použití přístupových práv). - Při vypracování příkladu můžete používat své vlastní kódy a dokumentaci nalezenou na internetu. Není povoleno spolupracovat s někým dalším.