Opdracht 4: Functors.

© Harry Broeders.

In hoofdstuk 5 van het boek (behandeld in les 8) heb je kennis gemaakt met het Functor design pattern.

De file functor.cpp bevat de functie:

void quick_sort(int* begin, int* end);

Deze functie kunnen je gebuiken om een array met integers te sorteren. Dit wordt gedemonstreerd in de functie main:

   const int aantal(20);
   int a[aantal];
   for (int i(0); i<aantal; ++i) {
      a[i]=std::rand();
   }
   quick_sort(a, a+aantal);

Je kunt de functie quick_sortechter niet gebruiken om een array met objecten van de class Student te sorteren. De class Student is als volgt gedefinieerd:

class Student {
public:
   Student(const char* vn, const char* an, int n);
   const std::string& geefVoornaam() const;
   const std::string& geefAchternaam() const;
   int geefNummer() const;
private:
   std::string voornaam;
   std::string achternaam;
   int nummer;
};

Opdracht 4.

Maak van de functie quick_sort een template functie waardoor je deze functie kunt gebruiken om array's van elk willekeurig type te sorteren. Houd er rekening mee dat er verschillende types zijn (zoals bijvoorbeeld Student of Rechthoek) waarvoor geen eenduidige definitie van de operator< kan worden gegeven. De functie die wordt gebuikt om elementen te vergelijken moet dus ook aan quick_sort kunnen worden doorgegeven. Zorg ervoor dat niet alleen functies maar ook functors gebruikt kunnen worden.

Test de quick_sort template door de array met Student'en te sorteren:

  • op nummer (van hoog naar laag) door een vergelijkingsfunctie mee te geven:
    quick_sort(array, array+n, /* vul hier een functie in! */);
  • op voornaam (van laag naar hoog) door een vergelijkingsfunctor mee te geven:. Studenten met dezelfde voornaam moeten op achternaam gesorteerd worden.
    quick_sort(array, array+n, /* vul hier een Functor in! */);

Verder met opdracht 5...