???????????????????????????????????????£????????????????????????????????????????ν????C???????????????????????????C++????????????????????????????????????????£????????£?????C????д???????????
?????????????????????????????????????????????????????????庬??????????ū??????o??壬???棬????????????C++?????????????????г???????????д??????????????????????????
???????????????????????????????????????????????????????μ???????????????????????????????????????????????
??????????
//Car.h
#ifndef CAR_H_
#define CAR_H_
typedef enum CarType_E
{
CAR_TYPE_BENZE = 0??
CAR_TYPE_BMW  ??
CAR_TYPE_AUDI  ??
CAR_TYPE_NONE  ??
}CarType_E;
class BaseCar
{
public:
BaseCar(CarType_E CarType);
virtual ~BaseCar();
virtual void CarSpeaker();
CarType_E _CarType;
};
class BenzeCar : public BaseCar
{
public:
BenzeCar(CarType_E CarType);
~BenzeCar();
public:
void CarSpeaker();
};
class BMWCar : public BaseCar
{
public:
BMWCar(CarType_E CarType);
~BMWCar();
void CarSpeaker();
};
class AudiCar : public BaseCar
{
public:
AudiCar(CarType_E CarType);
~AudiCar();
void CarSpeaker();
};
class CarFactory
{
public:
BaseCar* createNewCar(CarType_E CarType);
};
#endif /* CAR_H_ */
?????????
//Car.cpp
#include "Car.h"
#include <iostream>
using namespace std;
BaseCar::BaseCar(CarType_E CarType) : _CarType(CarType)
{
printf("BaseCar create ");
}
BaseCar::~BaseCar()
{
printf("BaseCar delete ");
}
void BaseCar::CarSpeaker()
{
std::cout << "BeBu! BeBu" << endl;
}
BenzeCar::BenzeCar(CarType_E CarType) : BaseCar(CarType)
{
printf("BenzeCar create ");
}
BenzeCar::~BenzeCar()
{
printf("BenzeCar delete ");
}
void BenzeCar::CarSpeaker()
{
printf("BeBu! BeBu! BenzeCar Car??Type:%d "?? _CarType);
}
BMWCar::BMWCar(CarType_E CarType) : BaseCar(CarType)
{
printf("BMWCar create ");
}
BMWCar::~BMWCar()
{
printf("BMWCar delete ");
}
void BMWCar::CarSpeaker()
{
printf("BeBu! BeBu! BMWCar Car??Type:%d "?? _CarType);
}
AudiCar::AudiCar(CarType_E CarType) : BaseCar(CarType)
{
printf("AudiCar create ");
}
AudiCar::~AudiCar()
{
printf("AudiCar delete ");
}
void AudiCar::CarSpeaker()
{
printf("BeBu! BeBu! AudiCar Car??Type:%d "?? _CarType);
}
BaseCar* CarFactory::createNewCar(CarType_E CarType)
{
BaseCar* newCar = NULL;
switch(CarType)
{
case CAR_TYPE_BENZE:
{
newCar = new BenzeCar(CAR_TYPE_BENZE);
break;
}
case CAR_TYPE_BMW:
{
newCar = new BMWCar(CAR_TYPE_BMW);
break;
}
case CAR_TYPE_AUDI:
{
newCar = new AudiCar(CAR_TYPE_AUDI);
break;
}
default:
{
newCar = new BaseCar(CAR_TYPE_NONE);
break;
}
}
return newCar;
}
//main.cpp
#include <iostream>
#include "Car.h"
using namespace std;
int main() {
CarFactory* carFactory = new CarFactory();
BaseCar* newBenzeCar = carFactory->createNewCar(CAR_TYPE_BENZE);
BaseCar* newBMWCar = carFactory->createNewCar(CAR_TYPE_BMW);
BaseCar* newAudiCar = carFactory->createNewCar(CAR_TYPE_AUDI);
newBenzeCar->CarSpeaker();
newBMWCar->CarSpeaker();
newAudiCar->CarSpeaker();
delete newBenzeCar;
newBenzeCar = NULL;
delete newBMWCar;
newBMWCar = NULL;
delete newAudiCar;
newAudiCar = NULL;
delete carFactory;
carFactory = NULL;
return 0;
}
??????????????

????????????????????????????????????????????????C??????????????????????????????????????
???????????????C++?????????????????????????????????????????????????????Щ??????????????????????????????????????Щ??????????????????????C????????????????????????????????е??????????????C?????????????????????????Ч???????????y???+???????+static???????ж??????????????static???????????????????????????????????????????????????????????????????????????
?????????????C++ ????????????????и????????????????????????е?????????и???????????????????C??????д???????????????????????ж??????????????????У?????ù????????????????????????????????????
?????????????C++?????????????????????????壬??????????÷???????????????麯????????ж???????е?????????????У????????????????????麯????????????????????C????д??????????????????????????????????????????????????常???????????????????????????????????????????