6.3w+
社区成员
// EnumType.h
enum EnumType
{
Concrete1,
Concrete2
};
// Factory.h
#include "EnumType.h"
class AbstractClass; // 前向声明
class Factory
{
public:
AbstractClass *Create(EnumType type);
};
// Factory.cpp
#include "Factory.h"
#include "AbstractClass.h"
#include "ConcreteClass1.h"
#include "ConcreteClass2.h"
#include <cassert>
AbstractClass *
Factory::Create(EnumType type)
{
switch (type)
{
case Concrete1:
return new Concrete1;
case Concrete2:
return new Concrete2;
default:
assert(!"Type Error!");
return NULL;
}
}
// AbstractClass.h
class AbstractClass
{
public:
virtual void foo() = 0;
virtual ~Abstract() {}
};
// ConcreteClass1.h
class ContreteClass1 : public AbstractClass
{
virtual void foo()
{
...
}
virtual ~ContreteClass1()
{
}
};
// ConcreteClass2.h
class ContreteClass2 : public AbstractClass
{
virtual void foo()
{
...
}
virtual ~ContreteClass2()
{
}
};
#pragma once
#include "Base.h" //A,B的基类
#include "A.h"
#include "B.h"
#include "C.h"
class A;
class B;
C* D = 0;
//....
if (i == 0)
{
D = new B(); // 不要声明为B*
}
else if (i == 2)
{
D = new A();
}