1 #include <iostream>
   2 #include <cstdlib>
   3 using namespace std;
   4 
   5 
   6 class stack { 
   7         
   8 public:
   9         stack(int n) : size(n), top(0) {
  10                 if (debflg) {
  11                         cout << "Ici constructeur de stack size = " << size << "\n";
  12                 };
  13                 A = (int *) malloc(size*sizeof(int));
  14                 for (int i=0; i<size; i++) A[i] = 0;
  15         };
  16         ~stack() { 
  17                 free(A);
  18                 if (debflg) {
  19                         cout << "Ici destructeur de stack (size = " << size << ")\n";
  20                 };      
  21         };
  22         static void set_deb () { debflg=true;};
  23         static void clr_deb () { debflg=false;};
  24         void push (int);
  25         int pop();
  26         int length() const {return top;};
  27         
  28 private:
  29         const int size;
  30         int *A;
  31         int top;
  32         static bool debflg;
  33         
  34 };
  35 
  36 void stack::push (int i) {
  37         if (top < size) {
  38                 A[top++] = i;
  39         }
  40 }
  41 
  42 int stack::pop() {
  43         if (top) {
  44                 return A[--top];
  45         } else {
  46                 return 0;
  47         }
  48 }
  49 
  50 bool stack::debflg=false;
  51 
  52 int main() {
  53         stack::set_deb();       // je veux voir ce qui se passe
  54         stack s(10);
  55         srand(time(NULL));
  56         
  57         for (int i=0;i<15;i++)
  58         {
  59                 int z = rand() % 1000;
  60                 s.push(z);
  61                 cout << "je mets dans la pile le nombre " << z << " (taille de la pile " << s.length() << ")\n";
  62         }
  63         cout << "\n\n\n";
  64         for (int i=0; i<15; i++) {
  65                 cout << "je depile maintenant le nombre " << s.pop() << " (taille de la pile " << s.length() << ")\n";
  66         }
  67 }
  68 
  69