====== Závěrečný test ====== ===== Struktura testu: ===== * 2x příklad / 5b * 8x lehčí otázka / 2b * 3x těžší otázka / 3b * čas na vypracování: 60/90 minut ===== Otázky ===== ==== Principy objektového programování ==== * Jaký je rozdíl mezi třídou a objektem? * Jak je určena viditelnost členských proměnných a metod? * Jaký je rozdíl mezi členskými metodami (a proměnnými) třídy a objektu? * Jaký je rozdíl mezi klíčovými slovy protected a private? * Co je polymorfismus a jak je ho dosaženo? * Co je to bázová třída a čím se vyznačuje? * Uveďte příklad deklarace plně virtuální metody? * Co je to implicitní konstuktor? * Co je to kopírovací konstruktor? * Jaké jsou možnosti dědění? Uveďte příklady. * Co je to virtuální dědění a k čemu je dobré? * Které vlastnosti rodiče potomek nedědí? * Co je to přetížení? Uveďte příklad (několik řádek kódu, ze kterých bude zřejmé, o co jde). * Jaký je rozdíl mezi přepsáním (override) a přetížením (overload)? * Co je vazba typu kompozice? Uveďte příklad (několik řádek kódu, ze kterých bude zřejmé, o co jde). * Co je vazba typu asociace? Uveďte přiklad (několik řádek kódu, ze kterých bude zřejmé, o co jde). * Co reprezentuje klíčové slovo this? * Jaký je rozdíl mezi referencí a ukazatelem? * Jaký je rozdíl mezi mělkou a hlubokou kopií? ==== Programování v C++ ==== * Napište příklad načteni hodnoty typu int ze standarního vstupu pomocí proudového operátoru. Jak lze ošetřit správnost vstupu? * Jak se v C++ provádí přetížení operátoru? Uveďte příklad. * Jaké operátory nelze v C++ přetížit? * Jak a kdy se volá konstruktor a destruktor? * Jaký je rozdíl mezi objektem alokovaným v zásobníku a objektem dynamicky alokovaným na haldě? * Jaký je rozdíl mezi operátory ''delete'' a ''delete[]''? * Jaká je návratová hodnota destruktoru? * Co je třeba zajistit při dynamické alokaci? Uveďte příklad. * Co je to výjimka a k čemu je dobrá? Uveďte příklad. * Kolik výjimek je možné v programu ošetřit? * Co je to generická funkce? * Jak lze vytvořit explicitní instanci generické funkce? K čemu je to dobré? * Jak jsou obvykle parametrizovány šablony tříd? * V čem spočívá problém vícenásobného dědění? Jak je možné tomuto problému zabránit? * Co je to zapouzdření a čemu je dobré? * Jak lze využít implicitní hodnoty argumentu funkce? Uveďte příklad. * Jaký je rozdíl mezi deklarací třídy pomocí class a struct. * Co je to konverzní konstruktor? * Jaký je rozdíl mezi statickou a dynamickou vazbou? * Jaký je význam klíčového slova auto? Lze ho použít vždy? * Co přesouvací (move) kontruktor? * Co je pravidlo tří (rule of three)? * Jaký je tvar definice lambda funkce v C++? Uveďte příklad a popište, co funkce dělá. ==== STL kontejnery ==== * Co je to kontejner? * Jaký je rozdíl mezi sekvenčními a asociativními kontejnery? Uveďte příklad. * Jaké jsou klíčové vlastnosti kontejneru std::vector? * Jaké jsou klíčové vlastnosti kontejneru std::map? * Jakého datového typu může být klíč kontejneru std::map? * Co je třeba zajistit v případě, že klíčem v kontejneru std::map je strukturovaný datový typ (např. naše vlastní třída)? * Jaký je význam datového typu std::pair? * Co je to iterátor? Uveďte příklad. * Jaký je rozdíl mezi konstatním a nekonstantním iterátorem? * Co všechno je třeba zajistit pro vytvoření vlastního iterátoru? * Co je range-for cyklus? Uveďte příklad. * Uveďte příklad použití algoritmu sort (deklarujte vektor libovolného datového typu, vložte do něj data a vektor seřaďte). ==== Praktické programování (Qt a související) ==== * Co je to event-driven programování? * Jaký je rozdíl mezi událostí a signálem? * Uveďtě příklady událostí v Qt a jejich využití. * Popište systém signálů a slotů, uveďte příklad propojení. * Jakým způsobem lze vytvořit v Qt okno a v něm vykreslit grafickou komponentu? * Jak lze měnit grafickou podobu jednotlivých Qt komponent? * Co se časovač (QTimer), k čemu je dobrý a jak se používá? * Co si představujete pod pojmem MVC? * Jaký je rozdíl mezi UDP a TCP transportní vrstvou? * Co je to REST rozhraní?