Uporabite in razširite nalogo 5.1 po spodnjih navodilih. Razširite nalogo tako, da v glavnem programu podprete spodnje klice metode sort, ki s pomočjo funkcije kot parameter sortira umetnine v galeriji na različne načine: gallery.sort(ascendingYear); cout << gallery.toString() << std::endl; gallery.sort(descendingYear); cout << gallery.toString() << std::endl; gallery.sort(ascendingPrice); cout << gallery.toString() << std::endl; V ta namen zapišite naslednje: Dodajte metodo sort v razred Gallery: void sort(bool (*c)(Artwork*, Artwork*)); Metoda sort uredi vector artworks v razredu Gallery, tako kot zahteva funkcija, ki jo prejme kot parameter. Za potrebe metode sort implementirajte še: bool ascendingYear(Artwork* i, Artwork* j); bool descandingYear(Artwork* i, Artwork* j); bool ascendingPrice(Artwork* i, Artwork* j); Funkcije implementirajte zunaj razreda Gallery. V glavnem programu podprite naslednjo vrstico kode, ki poišče prvo umetnino, ki je iz renesančnega obdobja. cout << gallery.find(isRenaissanceArt)->toString(); Potrebujemo naslednje: Dodajte metodo find v razred Gallery: Artwork* find(bool (*c)(Artwork*)); Metoda find vrne prvi element vector-ja artworks v razredu Gallery, ki ustreza pogoju. Za implementacijo uporabite funkcijo find_if iz knjižnice algorithms: http://www.cplusplus.com/reference/algorithm/find_if/. Tretji parameter funkcije find_if je parameter metode find (glej zgoraj). Za potrebe metode find v glavnem programu implementirajte še: bool isRenaissanceArt(Artwork* a); Funkcija preveri, ali je letnica umetnine med 1400 in 1600. V glavnem programu podprite naslednji vrstici kode, ki izpiše vse Painting umetnine iz galerije: PrintIfPainting paint; gallery.printArtworks(paint); Potrebujemo naslednje: Dodajte metodo printArtworks v razred Gallery: void printArtworks(PrintIfPainting i); Metoda printArtworks izpiše vse umetnine v razredu Gallery, tako kot zahteva funkcijski tip PrintIfPainting, ki jo prejme kot parameter. Za implementacijo uporabite funkcijo for_each iz knjižnice algorithms: http://www.cplusplus.com/reference/algorithm/for_each/. Tretji parameter funkcije for_each je parameter metode printArtworks (glej zgoraj). Za potrebe funkcije for_each implementirajte razred PrintIfPainting ter prekrijte operator: void operator()(Artwork* e); V zgornji metodi boste potrebovali rezervirano besedo dynamic_cast ( primer: https://en.cppreference.com/w/cpp/language/dynamic_cast). V glavnem programu demonstrirajte uporabo kazalcev na funkcije in funkcijske tipe.