59 lines
2.7 KiB
Markdown
59 lines
2.7 KiB
Markdown
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. |