1 #ifndef __TABLEAU__ 2 #define __TABLEAU__ 3 4 #include <iostream> 5 using namespace std; 6 7 // Un objet-fonction qui calcule une homothetie 8 // Le facteur d'homothétie est passé au constructeur de l'objet-fonction 9 class homo { 10 public: 11 homo(float f) : facteur(f) {}; 12 float operator()(float x) const {return facteur*x;}; 13 private: 14 float facteur; 15 }; 16 17 // Un objet-fonction qui ecrete le tableau 18 // Le seuil est passé au constructeur de l'objet-fonction 19 class ecret { 20 public: 21 ecret(float s) : seuil(s) {}; 22 float operator()(float x) const {return (x > seuil) ? seuil : x;}; 23 private: 24 float seuil; 25 }; 26 27 class Tableau { 28 public: 29 30 // Le constructeur principal - on passe la dimension du tableau en parametre 31 explicit Tableau(size_t ); 32 33 // Le trio infernal 34 Tableau (const Tableau & ); 35 Tableau & operator=(const Tableau &); 36 ~Tableau(); 37 38 // renvoie la taille du Tableau 39 size_t size() const { return sz;}; 40 41 // renvoie un element du Tableau sans deborder 42 float & operator[](size_t i); 43 44 // meme chose - version const 45 float operator[](size_t i) const; 46 47 // operateurs += 48 // Le parametre est un autre Tableau 49 Tableau & operator+=(const Tableau & ); 50 51 // Le parametre est un float 52 Tableau & operator+=(float ); 53 54 // imprime le Tableau sur la sortie standard 55 void print () const; 56 57 // La famille de fonctions transform: on leur passe un objet-fonction 58 // On est obligé de définir autant de fonctions transform qu'il y a de transformations (d'objets-fonctions) définies 59 void transform(const homo& ); 60 void transform(const ecret &); 61 62 private: 63 const size_t sz; 64 float *A; 65 66 // Le signe __ rappelle qu'il s'agit de methodes privees 67 void __copie (float src, float dest[], size_t s); 68 void __copie (float src[], float dest[], size_t s); 69 }; 70 71 // Une fonction qui n'est pas une methode 72 Tableau operator+(const Tableau& t1, const Tableau& t2); 73 74 #endif