???????????????????????????????????????锟�????????????????????????????????????????谓????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????写??????????????????????????????????????????????????甯�???????????????????????????????????????????