home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / m / m003_1 / sb_bc.ddi / BC / CH4 / PROG4-10.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-10  |  4.4 KB  |  257 lines

  1. //  PROG4-10.CPP
  2.  
  3. #include<string.h>
  4. #include<stdio.h>
  5.  
  6. /////////  Base Class : GM
  7. /////////
  8. class GM
  9. { protected:
  10.     char *CarName ;
  11.  
  12.   public:
  13.     GM(void) ;
  14.     GM(char *name) ;
  15.     ~GM() ;
  16.     void ShowCarName(void) ;
  17. } ;
  18.  
  19.  
  20. GM::GM(void)
  21. {
  22.   CarName = NULL ;
  23. }
  24.  
  25. GM::GM(char *name)
  26. {
  27.   CarName = strdup(name) ;
  28. }
  29.  
  30. GM::~GM(void)
  31. {
  32.   delete CarName ;
  33. }
  34.  
  35. void GM::ShowCarName(void)
  36. {
  37.   printf("General Motors .\n") ;
  38. }
  39.  
  40.  
  41. /////////  Derived Class : Cadillac
  42. /////////
  43. class Cadillac : public GM
  44. { public :
  45.     Cadillac(void) ;
  46.     Cadillac(char *name) ;
  47.     void ShowCarName(void) ;
  48. } ;
  49.  
  50.  
  51. Cadillac::Cadillac(void) : GM()
  52. {
  53.   // empty
  54. }
  55.  
  56. Cadillac::Cadillac(char *name) : GM(name)
  57. {
  58.   // empty
  59. }
  60.  
  61. void Cadillac::ShowCarName(void)
  62. {
  63.   printf("Cadillac car named %s\n",CarName) ;
  64. }
  65.  
  66.  
  67. /////////  Derived Class : Buick
  68. /////////
  69. class Buick : public GM
  70. { public :
  71.     Buick(void) ;
  72.     Buick(char *name) ;
  73.     void ShowCarName(void) ;
  74. } ;
  75.  
  76.  
  77. Buick::Buick(void) : GM()
  78. {
  79.   // empty
  80. }
  81.  
  82. Buick::Buick(char *name) : GM(name)
  83. {
  84.   // empty
  85. }
  86.  
  87. void Buick::ShowCarName(void)
  88. {
  89.   printf("Buick car named %s\n",CarName) ;
  90. }
  91.  
  92.  
  93.  
  94. //////////  Class GMLover
  95. //////////
  96. class GMLover
  97. { private:
  98.     unsigned int MaxCadillac ;
  99.     unsigned int NumCadillac ;
  100.     Cadillac **AryCadillac ;
  101.  
  102.     unsigned int MaxBuick ;
  103.     unsigned int NumBuick ;
  104.     Buick **AryBuick ;
  105.  
  106.   public:
  107.     GMLover(unsigned int maxc, unsigned int maxb) ;
  108.     ~GMLover() ;
  109.  
  110.     unsigned int Purchase(Cadillac *c) ;
  111.     unsigned int Purchase(Buick *b) ;
  112.  
  113.     Cadillac *SellCadillac(unsigned int c) ;
  114.     Buick    *SellBuick(unsigned int b) ;
  115.  
  116.     void ListCars(void) ;
  117. } ;
  118.  
  119.  
  120. GMLover::GMLover(unsigned int maxc, unsigned int maxb)
  121. {
  122.   MaxCadillac = maxc ;
  123.   NumCadillac = 0 ;
  124.  
  125.   MaxBuick = maxb ;
  126.   NumBuick = 0 ;
  127.  
  128.   AryCadillac = new Cadillac * [MaxCadillac] ;
  129.   AryBuick    = new Buick    * [MaxBuick] ;
  130.  
  131.   for (int i=0 ; i<MaxCadillac; i++) AryCadillac[i]=NULL ;
  132.  
  133.   for (i=0 ; i<MaxBuick; i++) AryBuick[i]=NULL ;
  134. }
  135.  
  136. GMLover::~GMLover(void)
  137. {
  138.   delete AryCadillac ;
  139.   delete AryBuick ;
  140. }
  141.  
  142. unsigned int GMLover::Purchase(Cadillac *c)
  143. {
  144.   if (NumCadillac == MaxCadillac) return 0 ;
  145.  
  146.   NumCadillac++ ;
  147.  
  148.   int i=0 ;
  149.   while (AryCadillac[i] != NULL) i++ ;
  150.  
  151.   AryCadillac[i] = c ;
  152.  
  153.   return i+1 ;
  154. }
  155.  
  156. unsigned int GMLover::Purchase(Buick *b)
  157. {
  158.   if (NumBuick == MaxBuick) return 0 ;
  159.  
  160.   NumBuick++ ;
  161.  
  162.   int i=0 ;
  163.   while (AryBuick[i] != NULL) i++ ;
  164.  
  165.   AryBuick[i] = b ;
  166.  
  167.   return i+1 ;
  168. }
  169.  
  170. Cadillac *GMLover::SellCadillac(unsigned int c)
  171. {
  172.   if (c > MaxCadillac) return NULL ;
  173.  
  174.   c-- ;
  175.  
  176.   if (AryCadillac[c] != NULL)
  177.      { Cadillac *temp = AryCadillac[c] ;
  178.  
  179.        AryCadillac[c] = NULL ;
  180.        NumCadillac-- ;
  181.  
  182.        return temp ;
  183.      }
  184.   else return NULL ;
  185. }
  186.  
  187. Buick *GMLover::SellBuick(unsigned int b)
  188. {
  189.   if (b > MaxBuick) return NULL ;
  190.  
  191.   b-- ;
  192.  
  193.   if (AryBuick[b] != NULL)
  194.      { Buick *temp = AryBuick[b] ;
  195.  
  196.        AryBuick[b] = NULL ;
  197.        NumBuick-- ;
  198.  
  199.        return temp ;
  200.      }
  201.   else return NULL ;
  202. }
  203.  
  204. void GMLover::ListCars(void)
  205. { int i ;
  206.  
  207.   if (NumCadillac>0)
  208.      for (i=0; i<MaxCadillac; i++)
  209.      if (AryCadillac[i] != NULL)
  210.         { printf("Car Lover said : This car is my %d-th ",i+1) ;
  211.           AryCadillac[i]->ShowCarName() ;
  212.         }
  213.  
  214.   if (NumBuick>0)
  215.      for (i=0; i<MaxBuick; i++)
  216.      if (AryBuick[i] != NULL)
  217.         { printf("GM Lover said : This car is my %d-th ",i+1) ;
  218.           AryBuick[i]->ShowCarName() ;
  219.         }
  220. }
  221.  
  222.  
  223.  
  224. Cadillac C1("BROUGHAM") ;
  225. Cadillac C2("FLEETWOOD") ;
  226. Cadillac C3("DE VILLE") ;
  227.  
  228. Buick B1("PARK AVENUE") ;
  229. Buick B2("CENUTRY") ;
  230. Buick B3("REGAL") ;
  231.  
  232.  
  233. int main()
  234. { GMLover Chen(4,5) ;
  235.  
  236.   Chen.Purchase(&C3) ;            // Chen purchases DE VILLE, Cadillac
  237.  
  238.   unsigned int b2car = Chen.Purchase(&B2) ;
  239.                   // Chen purchases CENUTRY, Buick
  240.  
  241.   Chen.Purchase(&C2) ;            // Chen purchases FLEETWOOD, Cadillac
  242.  
  243.   unsigned int c1car = Chen.Purchase(&C1) ;
  244.                   // Chen purchases BROUGHAM, Cadillac
  245.  
  246.   Chen.SellCadillac(c1car) ;      // Chen sells BROUGHAM, Cadillac
  247.  
  248.   Chen.Purchase(&B1) ;            // Chen purchases PARK AVENUE, Buick
  249.  
  250.   Chen.Purchase(&B3) ;            // Chen purchases REGAL, Buick
  251.  
  252.   Chen.SellBuick(b2car) ;         // Chen selle CENUTRY, Buick
  253.  
  254.   Chen.ListCars() ;               // List all Chen's GM cars
  255. }
  256.  
  257.