29 lines
2.0 KiB
Markdown
29 lines
2.0 KiB
Markdown
Uporabite in razširite nalogo 10.1 po spodnjih navodilih.
|
|
|
|
Vse raw kazalce v kodi zamenjajte z std::shared_ptr (naj bo v kombinaciji z std::make_shared in ne new).
|
|
|
|
Pri nalogi 10.1 smo uporabili sledečo notacijo funkcije kot paramenter Artwork* find(bool (*c)(Artwork*));. Od verzije C++11 imamo na voljo std::function, ki omogoča, da lahko podamo funkcijo kot parameter kot objekt.
|
|
|
|
Torej na primeru metode find bi nova notacija izgledala takole: Artwork* find(std::function<bool(Artwork*)> c);
|
|
|
|
V glavnem programu podprite naslednjo vrstico kode, ki iz vektorja artworks odstrani vse umetnine, ki ustrezajo glede na podano funkcijo.
|
|
|
|
cout << "\nBefore filter: \n";
|
|
cout << gallery.toString();
|
|
gallery.filterOut(isOlderThan2000);
|
|
cout << "\nAfter filter: \n";
|
|
cout << gallery.toString();
|
|
|
|
V razredu Gallery dodajte in implementirajte metodo filterOut, ki kot parameter prejme funkcijo (uporabite std::function), ki naj ima izhodni tip bool prejme pa std::shared_ptr<Artwork>. Metoda mora odstraniti umetnine iz artworks, ki ustrezajo glede na podano funkcijo.
|
|
|
|
Za potrebe metode filterOut dodajte v glavni program še funkcijo bool isOlderThan2000(std::shared_ptr<Artwork> a), ki vrne true, če je slika starejša od leta 2000, sicer vrne false.
|
|
|
|
Namesto, da kot parameter podamo že vnaprej spisano funkcijo (tako kot smo npr. isOlderThan2000), lahko uporabimo tudi lambda izraz . Primer lambda izraza pri nalogi 10.1 bi lahko bil pri sort, namesto podane funkcije ascendingYear:
|
|
|
|
gallery.sort([](std::shared_ptr<Artwork> i, std::shared_ptr<Artwork> j){
|
|
return i->getYear() < j->getYear();
|
|
});
|
|
|
|
V glavnem programu kličete metodo filterOut in podate funkcijo kot parameter v obliki lambda izraza. Napiši na takšen način, da boste odstranili umetnine, ki so cenejše od 100€ (torej ne smete imeti posebej deklarirane funkcije).
|
|
|
|
Izmislite in implementirajte smiselni primer za večkratno dedovanje (pri tem ni dovoljena uporaba primera s predavanj). |