| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 
 | class Foo
{
    public:
         /* un alias de type sur un itérateur constant, 
          * utilisable de l'extérieur, qui "cache" le fait 
          * que l'on travaille avec un std::vector
          */
         typedef std::vector<int>::const_iterator const_iterator;
        /* éventullement, pour autant que cela ait du sens, 
         * un alias de type sur l'itérateur non constant
         */
        typedef std::vector<int>::iterator iterator;
          /* on apprécie généralement de mettre RAII en oeuvre,
           * Ce constructeur permet de créer directement une instance
           * de la classe en fournissant l'ensemble des valeurs correctes
           */
          template <typename iter>
          Foo(iter b, iter e):items_(b,e){}
         /* la fonction qui permet de savoir combien d'éléments
          * sont gérés par l'instance de la classe
          */
        size_t size() const{return items_.size();}
        /* les fonctions renvoyant un itérateur constant sur le premier
         * élément et sur ce qui suit le dernier élément
         */
       const_iterator begin() const{return items_.begin();}
       const_iterator end() const{return items_.end();}
        /* les fonctions renvoyant un itérateur sur le premier
         * élément et sur ce qui suit le dernier élément, si cela a du sens
         */
        /* les fonctions renvoyant un itérateur constant sur le premier
         * élément et sur ce qui suit le dernier élément
         */
        iterator begin() {return items_.begin();}
        iterator end() {return items_.end();}
        /* la fonction permettant de rajouter un élément */
        void add(int i)
        {
           /* si on rajoute un membre représentant le nombre 
            * maximal d'éléments, on peut envisager de tester
            * si ce nombre n'est pas déjà atteint, et prendre
            * les mesures que cela imposerait ;)
            */
           items_.push_back(i):
        }
        /* on peut prévoir quantité d'autres fonctions, selon l'utilisation
         * que l'on prévoit de faire de cette classe ;)
         */
    private:
        /* je l'ai dit, la classe vector est bien plus adaptée qu'un pointeur ;)
         */ 
        std::vector<int> items_;
}; | 
Partager