home *** CD-ROM | disk | FTP | other *** search
- // PROG4-11.CPP
-
- #include<string.h>
- #include<stdio.h>
-
- ///////// Base Class : GM
- /////////
- class GM
- { protected:
- char *CarName ;
-
- public:
- GM(void) ;
- GM(char *name) ;
- ~GM() ;
- virtual 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) ;
- virtual 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) ;
- virtual 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 MaxGMCar ;
- unsigned int NumGMCar ;
- GM **AryGMCar ;
-
- public:
- GMLover(unsigned int max) ;
- ~GMLover() ;
-
- unsigned int Purchase(GM *gm) ;
-
- GM *Sell(unsigned int car) ;
-
- void ListCars(void) ;
- } ;
-
-
- GMLover::GMLover(unsigned int max)
- {
- MaxGMCar = max ;
- NumGMCar = 0 ;
-
- AryGMCar = new GM * [MaxGMCar] ;
-
- for (int i=0 ; i<MaxGMCar; i++) AryGMCar[i]=NULL ;
- }
-
- GMLover::~GMLover(void)
- {
- delete AryGMCar ;
- }
-
- unsigned int GMLover::Purchase(GM *gm)
- {
- if (NumGMCar == MaxGMCar) return 0 ;
-
- NumGMCar++ ;
-
- int i=0 ;
- while (AryGMCar[i] != NULL) i++ ;
-
- AryGMCar[i] = gm ;
-
- return i+1 ;
- }
-
-
- GM *GMLover::Sell(unsigned int car)
- {
- if (car > MaxGMCar) return NULL ;
-
- car-- ;
-
- if (AryGMCar[car] != NULL)
- { GM *temp = AryGMCar[car] ;
-
- AryGMCar[car] = NULL ;
- NumGMCar-- ;
-
- return temp ;
- }
- else return NULL ;
- }
-
- void GMLover::ListCars(void)
- {
- if (NumGMCar>0)
- for (int i=0; i<MaxGMCar; i++)
- if (AryGMCar[i] != NULL)
- { printf("Car Lover said : This car is my %d-th ",i+1) ;
- AryGMCar[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(9) ;
-
- 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.Sell(c1car) ; // Chen sells BROUGHAM, Cadillac
-
- Chen.Purchase(&B1) ; // Chen purchases PARK AVENUE, Buick
-
- Chen.Purchase(&B3) ; // Chen purchases REGAL, Buick
-
- Chen.Sell(b2car) ; // Chen selle CENUTRY, Buick
-
- Chen.ListCars() ; // List all Chen's GM cars
- }
-
-