TD 15 C++

Rappels


Exercice 1: Lambda

  1. Implémentez le programme déclaré dans 1.1.h (copié ci-dessous) dans un fichier 1.1.cc. Ne modifiez pas 1.1.h !
    #include <functional>
    #include <string>
    #include <vector>
    
    using std::string;
    using std::vector;
    
    struct Student {
      string name;   // Eg. "John Smith"
      int number;    // Identification number, eg. "12345678"
      double grade;  // Global grade over 20.0, eg. 15.5.
    };
    
    // Sorts students by name, lexicographically: "Aab" before "Ac".
    void SortStudentsByName(vector<Student>* students);
    
    // Sorts students by their identification number modulo M: 0 before 1.
    void SortStudentsByNumberModulo(vector<Student>* students, int M);
    
    // Applies the given function to each student inside the vector.
    void ApplyFunctionToStudents(std::function<void(Student*)> fun,
                                 vector<Student>* students);
    Testez votre code:
    rm 1.tar.gz; wget --no-cache http://fabien.viger.free.fr/cpp/td15/1.tar.gz
    tar xf 1.tar.gz
    make 1.1
    RENDU: 1.1.cc


Exercice 2: Smart pointers

  1. Implémentez ComputeMedianObj() qui est déclaré dans 2.1.h (copié ci-dessous) dans un fichier 2.1.cc, sans utiliser le mot-clé delete.
    Ne modifiez pas 2.1.h et n'implémentez pas les constructeurs/destructeurs de MyObj.
    class MyObj {
     public:
      explicit MyObj(int seed);  // Implemented in 2.1.test.cc
      ~MyObj();                  // Implemented in 2.1.test.cc
    
      // NOT default- and copy-constructible!
      MyObj() = delete;
      MyObj(const MyObj&) = delete;
    
      int Value() const { return value_; }
     private:
      const int value_;
    };
    
    // This function, which you must implement, should do the following:
    // - Construct N instances of MyObj, with seed=0...N-1.
    // - Sort them by Value()
    // - Return the "median" value, i.e. the Value() of the N/2-th MyObj in the
    //   sorted list.
    // - [IMPORTANT!] Destroy all instances of MyObj before returning.
    int ComputeMedianMyObj(int N);
    Testez votre code:
    rm 2.tar.gz; wget --no-cache http://fabien.viger.free.fr/cpp/td15/2.tar.gz
    tar xf 2.tar.gz
    make 2.1
    RENDU: 2.1.cc


Exercice 3: Factory

  1. Complétez 3.1.h (version initiale copiée ci-dessous) et écrivez l'implémentation dans un fichier 3.1.cc.
    class Hat {
     public:
      Hat() {  ++num_hats_global_; }
      ~Hat() { --num_hats_global_; }
      static int NumHatsGlobal() { return num_hats_global_; }
     private:
      static int num_hats_global_;
    };
    
    class HatFactory {
     public:
      // The factory constructs a new hat, and gives me a pointer to the
      // newly constructed object. The caller does not own the Hat.
      Hat* NewHat();
    
      // All hats ever constructed are destructed when the factory is destructed.
      ~HatFactory();
    
     private:
      // TODO
    };
    Testez votre code:
    rm 3.tar.gz; wget --no-cache http://fabien.viger.free.fr/cpp/td15/3.tar.gz
    tar xf 3.tar.gz
    make 3.1
    RENDU: 3.1.h et 3.1.cc