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

  1. //  PROG4-11.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.     virtual 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.     virtual 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.     virtual 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 MaxGMCar ;
  99.     unsigned int NumGMCar ;
  100.     GM **AryGMCar ;
  101.  
  102.   public:
  103.     GMLover(unsigned int max) ;
  104.     ~GMLover() ;
  105.  
  106.     unsigned int Purchase(GM *gm) ;
  107.  
  108.     GM *Sell(unsigned int car) ;
  109.  
  110.     void ListCars(void) ;
  111. } ;
  112.  
  113.  
  114. GMLover::GMLover(unsigned int max)
  115. {
  116.   MaxGMCar = max ;
  117.   NumGMCar = 0 ;
  118.  
  119.   AryGMCar = new GM * [MaxGMCar] ;
  120.  
  121.   for (int i=0 ; i<MaxGMCar; i++) AryGMCar[i]=NULL ;
  122. }
  123.  
  124. GMLover::~GMLover(void)
  125. {
  126.   delete AryGMCar ;
  127. }
  128.  
  129. unsigned int GMLover::Purchase(GM *gm)
  130. {
  131.   if (NumGMCar == MaxGMCar) return 0 ;
  132.  
  133.   NumGMCar++ ;
  134.  
  135.   int i=0 ;
  136.   while (AryGMCar[i] != NULL) i++ ;
  137.  
  138.   AryGMCar[i] = gm ;
  139.  
  140.   return i+1 ;
  141. }
  142.  
  143.  
  144. GM *GMLover::Sell(unsigned int car)
  145. {
  146.   if (car > MaxGMCar) return NULL ;
  147.  
  148.   car-- ;
  149.  
  150.   if (AryGMCar[car] != NULL)
  151.      { GM *temp = AryGMCar[car] ;
  152.  
  153.        AryGMCar[car] = NULL ;
  154.        NumGMCar-- ;
  155.  
  156.        return temp ;
  157.      }
  158.   else return NULL ;
  159. }
  160.  
  161. void GMLover::ListCars(void)
  162. {
  163.   if (NumGMCar>0)
  164.      for (int i=0; i<MaxGMCar; i++)
  165.      if (AryGMCar[i] != NULL)
  166.         { printf("Car Lover said : This car is my %d-th ",i+1) ;
  167.           AryGMCar[i]->ShowCarName() ;
  168.         }
  169. }
  170.  
  171.  
  172. Cadillac C1("BROUGHAM") ;
  173. Cadillac C2("FLEETWOOD") ;
  174. Cadillac C3("DE VILLE") ;
  175.  
  176. Buick B1("PARK AVENUE") ;
  177. Buick B2("CENUTRY") ;
  178. Buick B3("REGAL") ;
  179.  
  180.  
  181. int main()
  182. { GMLover Chen(9) ;
  183.  
  184.   Chen.Purchase(&C3) ;            // Chen purchases DE VILLE, Cadillac
  185.  
  186.   unsigned int b2car = Chen.Purchase(&B2) ;
  187.                   // Chen purchases CENUTRY, Buick
  188.  
  189.   Chen.Purchase(&C2) ;            // Chen purchases FLEETWOOD, Cadillac
  190.  
  191.   unsigned int c1car = Chen.Purchase(&C1) ;
  192.                   // Chen purchases BROUGHAM, Cadillac
  193.  
  194.   Chen.Sell(c1car) ;              // Chen sells BROUGHAM, Cadillac
  195.  
  196.   Chen.Purchase(&B1) ;            // Chen purchases PARK AVENUE, Buick
  197.  
  198.   Chen.Purchase(&B3) ;            // Chen purchases REGAL, Buick
  199.  
  200.   Chen.Sell(b2car) ;              // Chen selle CENUTRY, Buick
  201.  
  202.   Chen.ListCars() ;               // List all Chen's GM cars
  203. }
  204.  
  205.