1 #ifndef __TABLEAU__
   2 #define __TABLEAU__
   3 
   4 #include <iostream>
   5 using namespace std;
   6 
   7 // Un objet-fonction general, a un parametre
   8 class Functor1p {
   9 public:
  10     virtual float operator()(float) const = 0;
  11 };
  12 
  13 class Tableau {
  14 public:
  15 
  16         // Le constructeur principal - on passe la dimension du tableau en parametre
  17         explicit Tableau(size_t );
  18 
  19         // Le trio infernal
  20         Tableau (const Tableau & );
  21         Tableau & operator=(const Tableau &);
  22         ~Tableau();
  23 
  24         // renvoie la taille du Tableau
  25         size_t size() const { return sz;};
  26         
  27         // renvoie un element du Tableau sans deborder
  28         float & operator[](size_t i);
  29         
  30         // meme chose - version const
  31         float operator[](size_t i) const;
  32         
  33         // operateurs +=
  34         // Le parametre est un autre Tableau
  35         Tableau & operator+=(const Tableau & );
  36         
  37         // Le parametre est un float
  38         Tableau & operator+=(float );
  39         
  40         // imprime le Tableau sur la sortie standard
  41         void print () const;
  42         
  43         // La fonction transform: on leur passe un objet-fonction à 1 paramètre
  44         void transform(const Functor1p& );
  45 
  46 private:
  47         const size_t sz;
  48         float *A;
  49         
  50         // Le signe __ rappelle qu'il s'agit de methodes privees
  51         void __copie (float src, float dest[], size_t s);
  52         void __copie (float src[], float dest[], size_t s);
  53 };
  54 
  55 // Une fonction qui n'est pas une methode
  56 Tableau operator+(const Tableau& t1, const Tableau& t2);
  57 
  58 #endif