Inspired by Martin Svoboda.
Umístění: 05-movie-database
Čas: 6 minutes
Vytvořte třídu MediaContent, která reprezentuje multimediální obsah. Třída musí umožnit reprezentovat následující:
Definujte parametrický konstruktor se všemy atributy. Dále definujte funkce pro přístup k datům s vhodným využitím inline funkcí.
Umístění: 05-movie-database
Čas: 10 minutes
Vytvořte třídu Movie, pro reprezentaci filmů, jako rozšíření třídy MediaContent o následující obsah:
Vytvořte třídu Show, pro reprezentaci seriálů, jako rozšíření třídy MediaContent o následující obsah:
Pro obě třídy definujte funkce pro přístup k datům.
Umístění: 05-movie-database
Čas: 10 minutes
Přidejte následující pure virtual metodu pro serializaci do třídy MediaContent.
virtual std::string as_json() const = 0;
Implementujte metody v potomc9ch tak, aby produkovala ekvivalent následujícího výstupu.
{ "name": "Final Fantasy: Esence života", "genre": "sci-fi", "rating": 67, "cast": ["Alec Baldwin", "Ving Rhames"], "release year": 2001 }
Pokud není uvedený žádný herec, pole "cast" vůbec nevypisujte.
Umístění: 05-movie-database
Čas: 10 minutes
Cílem je rozšířit třídu tak, aby bylo možné její efektivní vytvoření.
Implementujte parametrické konstruktory, který bude přijímat r-value reference pro: jméno, žánr a jména herců. Dále implementujte move konstruktor a move assignment. Vyzkoušejte vložení do std::vector pomocí push_back(...), push_back(std::move(...)), emplace_back(...).
Vložení bude třeba provádět do různých vektorů, stačí implementace pro jednu třídu.
Umístění: 05-movie-database
Čas: N/A
Rozšiřte svoji implementaci o možnost načtení databáze filmů z CSV souboru.
CSV soubor používá středník jako oddělovač sloupců. Herci jsou ve svém sloupci odděleni pomocí čárky. Můžete předpokládat, že CSV soubor obsahuje vždy hlavičku na prvním řádku. V hlavičce jsou následující sloupce: name, type, genre, rating, cast, release year, seasons count. Sloupec type obsahuje hodnoty "movie" nebo "show" pro film, nebo seriál.
Funkcionalitu implementujte jako statické funkce třídy MultimediaDatabase.
bool import_csv(const std::string& filename, std::vector<Movie>& movies, std::vector<Show>& shows);
bool import_csv(std::istream& stream, std::vector<Movie>& movies, std::vector<Show>& shows);
Fukce vrací false, pokud se načtení nepovedlo.
Jde o ideální příležitost otestovat dříve implementovaný CSV parser :)