home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 13 / CDA13.ISO / cdactual / demobin / share / program / C / ANSICPP.ZIP / EX07031.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1990-07-24  |  1.1 KB  |  54 lines

  1. // ex07031.cpp
  2. // Class-specific new and delete operators
  3. #include <iostream.h>
  4. #include <string.h>
  5. #include <stddef.h>
  6.  
  7. const int MAXNAMES = 5;
  8.  
  9. class Names    {
  10.     char name[25];
  11. public:
  12.     void setname(char *s) { strcpy(name, s); }
  13.     void display() { cout << '\n' << name; }
  14.     void *operator new(size_t);
  15.     void operator delete(void *);
  16. };
  17.  
  18. // -------- simple memory pool to handle fixed number of Names
  19. char pool[MAXNAMES] [sizeof(Names)];
  20. int inuse[MAXNAMES];
  21.  
  22. // -------- overloaded new operator for the Names class
  23. void *Names::operator new(size_t)
  24. {
  25.     for (int p = 0; p < MAXNAMES; p++)
  26.         if (!inuse[p])    {
  27.             inuse[p] = 1;
  28.             return pool+p;
  29.         }
  30.     return NULL; 
  31. }
  32.  
  33. // --------- overloaded delete operator for the Names class
  34. void Names::operator delete(void *p)
  35. {
  36.     inuse[((char *)p - pool[0]) / sizeof(Names)] = 0;
  37. }
  38.  
  39. main()
  40. {
  41.     Names *nm[MAXNAMES];
  42.     for (int i = 0; i < MAXNAMES; i++)    {
  43.         cout << "\nEnter name # " << i+1 << ": ";
  44.         char name[25];
  45.         cin >> name;
  46.         nm[i] = new Names;
  47.         nm[i]->setname(name);
  48.     }
  49.     for (i = 0; i < MAXNAMES; i++)    {
  50.         nm[i]->display();
  51.         delete nm[i];
  52.     }
  53. }
  54.