1 #ifndef __TABLEAU__
   2 #define __TABLEAU__
   3 
   4 #include <iostream>
   5 using namespace std;
   6 
   7 class Tableau {
   8 public:
   9 
  10         // Le constructeur principal - on passe la dimension du tableau en parametre
  11         explicit Tableau(size_t n);
  12 
  13         // Le trio infernal
  14         Tableau (const Tableau & t);
  15         Tableau & operator=(const Tableau &t);
  16         ~Tableau();
  17 
  18         // renvoie la taille du Tableau
  19         size_t size() const { return sz;};
  20         
  21         // renvoie un element du Tableau sans deborder
  22         float & operator[](size_t i);
  23         
  24         // meme chose - version const
  25         float operator[](size_t i) const;
  26         
  27         // operateurs +=
  28         // Le parametre est un autre Tableau
  29         Tableau & operator+=(const Tableau & t);
  30         
  31         // Le parametre est un float
  32         Tableau & operator+=(float x);
  33         
  34         // Operateur d'impression, on le déclare souvent comme ami
  35         // Ici ce n'est pas la peine, car on utiliser l'opérateur[]
  36         // friend ostream & operator<<(ostream&, const Tableau&);
  37  
  38 private:
  39         const size_t sz;
  40         float *A;
  41         
  42         // Le signe __ rappelle qu'il s'agit de methodes privees
  43         void __copie (float src, float dest[], size_t s);
  44         void __copie (float src[], float dest[], size_t s);
  45 };
  46 
  47 // Une fonction qui n'est pas une methode
  48 // Le prototype ci-dessous fonctionne, mais entraine l'appel de 2 constructuers + 2 destructeurs inutiles !
  49 // Tableau operator+(Tableau t1, Tableau t2);
  50 Tableau operator+(const Tableau& t1, const Tableau& t2);
  51 
  52 // Operateur d'impression, déclaré ici
  53 ostream & operator<<(ostream&, const Tableau&);
  54 
  55 #endif