home *** CD-ROM | disk | FTP | other *** search
- // PROG4-10.CPP
-
- #include<string.h>
- #include<stdio.h>
-
- ///////// Base Class : GM
- /////////
- class GM
- { protected:
- char *CarName ;
-
- public:
- GM(void) ;
- GM(char *name) ;
- ~GM() ;
- void ShowCarName(void) ;
- } ;
-
-
- GM::GM(void)
- {
- CarName = NULL ;
- }
-
- GM::GM(char *name)
- {
- CarName = strdup(name) ;
- }
-
- GM::~GM(void)
- {
- delete CarName ;
- }
-
- void GM::ShowCarName(void)
- {
- printf("General Motors .\n") ;
- }
-
-
- ///////// Derived Class : Cadillac
- /////////
- class Cadillac : public GM
- { public :
- Cadillac(void) ;
- Cadillac(char *name) ;
- void ShowCarName(void) ;
- } ;
-
-
- Cadillac::Cadillac(void) : GM()
- {
- // empty
- }
-
- Cadillac::Cadillac(char *name) : GM(name)
- {
- // empty
- }
-
- void Cadillac::ShowCarName(void)
- {
- printf("Cadillac car named %s\n",CarName) ;
- }
-
-
- ///////// Derived Class : Buick
- /////////
- class Buick : public GM
- { public :
- Buick(void) ;
- Buick(char *name) ;
- void ShowCarName(void) ;
- } ;
-
-
- Buick::Buick(void) : GM()
- {
- // empty
- }
-
- Buick::Buick(char *name) : GM(name)
- {
- // empty
- }
-
- void Buick::ShowCarName(void)
- {
- printf("Buick car named %s\n",CarName) ;
- }
-
-
-
- ////////// Class GMLover
- //////////
- class GMLover
- { private:
- unsigned int MaxCadillac ;
- unsigned int NumCadillac ;
- Cadillac **AryCadillac ;
-
- unsigned int MaxBuick ;
- unsigned int NumBuick ;
- Buick **AryBuick ;
-
- public:
- GMLover(unsigned int maxc, unsigned int maxb) ;
- ~GMLover() ;
-
- unsigned int Purchase(Cadillac *c) ;
- unsigned int Purchase(Buick *b) ;
-
- Cadillac *SellCadillac(unsigned int c) ;
- Buick *SellBuick(unsigned int b) ;
-
- void ListCars(void) ;
- } ;
-
-
- GMLover::GMLover(unsigned int maxc, unsigned int maxb)
- {
- MaxCadillac = maxc ;
- NumCadillac = 0 ;
-
- MaxBuick = maxb ;
- NumBuick = 0 ;
-
- AryCadillac = new Cadillac * [MaxCadillac] ;
- AryBuick = new Buick * [MaxBuick] ;
-
- for (int i=0 ; i<MaxCadillac; i++) AryCadillac[i]=NULL ;
-
- for (i=0 ; i<MaxBuick; i++) AryBuick[i]=NULL ;
- }
-
- GMLover::~GMLover(void)
- {
- delete AryCadillac ;
- delete AryBuick ;
- }
-
- unsigned int GMLover::Purchase(Cadillac *c)
- {
- if (NumCadillac == MaxCadillac) return 0 ;
-
- NumCadillac++ ;
-
- int i=0 ;
- while (AryCadillac[i] != NULL) i++ ;
-
- AryCadillac[i] = c ;
-
- return i+1 ;
- }
-
- unsigned int GMLover::Purchase(Buick *b)
- {
- if (NumBuick == MaxBuick) return 0 ;
-
- NumBuick++ ;
-
- int i=0 ;
- while (AryBuick[i] != NULL) i++ ;
-
- AryBuick[i] = b ;
-
- return i+1 ;
- }
-
- Cadillac *GMLover::SellCadillac(unsigned int c)
- {
- if (c > MaxCadillac) return NULL ;
-
- c-- ;
-
- if (AryCadillac[c] != NULL)
- { Cadillac *temp = AryCadillac[c] ;
-
- AryCadillac[c] = NULL ;
- NumCadillac-- ;
-
- return temp ;
- }
- else return NULL ;
- }
-
- Buick *GMLover::SellBuick(unsigned int b)
- {
- if (b > MaxBuick) return NULL ;
-
- b-- ;
-
- if (AryBuick[b] != NULL)
- { Buick *temp = AryBuick[b] ;
-
- AryBuick[b] = NULL ;
- NumBuick-- ;
-
- return temp ;
- }
- else return NULL ;
- }
-
- void GMLover::ListCars(void)
- { int i ;
-
- if (NumCadillac>0)
- for (i=0; i<MaxCadillac; i++)
- if (AryCadillac[i] != NULL)
- { printf("Car Lover said : This car is my %d-th ",i+1) ;
- AryCadillac[i]->ShowCarName() ;
- }
-
- if (NumBuick>0)
- for (i=0; i<MaxBuick; i++)
- if (AryBuick[i] != NULL)
- { printf("GM Lover said : This car is my %d-th ",i+1) ;
- AryBuick[i]->ShowCarName() ;
- }
- }
-
-
-
- Cadillac C1("BROUGHAM") ;
- Cadillac C2("FLEETWOOD") ;
- Cadillac C3("DE VILLE") ;
-
- Buick B1("PARK AVENUE") ;
- Buick B2("CENUTRY") ;
- Buick B3("REGAL") ;
-
-
- int main()
- { GMLover Chen(4,5) ;
-
- Chen.Purchase(&C3) ; // Chen purchases DE VILLE, Cadillac
-
- unsigned int b2car = Chen.Purchase(&B2) ;
- // Chen purchases CENUTRY, Buick
-
- Chen.Purchase(&C2) ; // Chen purchases FLEETWOOD, Cadillac
-
- unsigned int c1car = Chen.Purchase(&C1) ;
- // Chen purchases BROUGHAM, Cadillac
-
- Chen.SellCadillac(c1car) ; // Chen sells BROUGHAM, Cadillac
-
- Chen.Purchase(&B1) ; // Chen purchases PARK AVENUE, Buick
-
- Chen.Purchase(&B3) ; // Chen purchases REGAL, Buick
-
- Chen.SellBuick(b2car) ; // Chen selle CENUTRY, Buick
-
- Chen.ListCars() ; // List all Chen's GM cars
- }
-
-