点评原型到几种方法:
1.函数指针类型
2.工厂模型
3.宏的方法使用
4.静态函数的使用
5.静态成员变量的使用
静态成员变量的定义后,仍然需要在cpp中引用之。
如:factory* factory::instance = new factory();
6.map方法的使用
//stdafx.h-----------------------------------------------------------------------------
#ifndef _FACTORY_
#define _FACTORY_
//在每一个类的定义中声明一个静态函数
#define DECLARE_DYNCREATE(class_name) /
static Base* CreateObject()/
{/
return new class_name##();/
}
//注册一个类的静态函数
#define REGCLASS(id, class_name)/
factory::m_ClassMap[id] = &(class_name::CreateObject);
#include <stdio.h>
#pragma warning(disable:4786)
#include <map>
using namespace std;
//各个类对应的枚举值
enum ClassId
{
CsubCommId = 0,
CSubAcId,
CsubCfId,
};
//Base基类
class Base
{
public:
virtual void print()
{
return;
}
};
//Base的继承类
class CSubCommon:public Base
{
public:
//使用宏来声明一个类的静态函数,静态函数用来产生该类的对象
DECLARE_DYNCREATE(CSubCommon)
void print()
{
printf("CSubCommon./n");
}
};
//Base的继承类
class CSubAc:public Base
{
public:
//使用宏来声明一个类的静态函数,静态函数用来产生该类的对象
DECLARE_DYNCREATE(CSubAc)
void print()
{
printf("CSubAc./n");
}
};
//Base的继承类
class CSubCf:public Base
{
public:
//使用宏来声明一个类的静态函数,静态函数用来产生该类的对象
DECLARE_DYNCREATE(CSubCf)
void print()
{
printf("CSubCf./n");
}
};
//声明函数指针类型,此类型用于定义个MAP类型的成员变量
typedef Base* (*CreateObj)();
class factory
{
public:
//函数为工厂类中生产对象的函数。
Base* CreateObjFum(int id);
static factory* Instance()
{
return instance;
}
//此map的作用用于存储,枚举值和类的静态函数指针的对应关系。
map<int, CreateObj> m_ClassMap;
private:
static factory* instance;
factory();
~factory();
};
#endif
// stdafx.cpp : -----------------------------------------------------------------------------
#include "stdafx.h"
Base* factory::CreateObjFum(int id)
{
map<int, CreateObj>::iterator it = factory::m_ClassMap.find(id);
if (it == factory::m_ClassMap.end())
{
return NULL;
}
else
{
return it->second();
}
}
factory::factory()
{
REGCLASS(CsubCommId, CSubCommon)
REGCLASS(CSubAcId, CSubAc)
REGCLASS(CsubCfId, CSubCf)
}
factory* factory::instance = new factory();
factory::~factory()
{
if (instance != NULL)
{
delete instance;
instance = NULL;
}
}
//main.cpp-----------------------------------------------------------------------------
#include "stdafx.h"
int main(int argc, char* argv[])
{
factory::Instance()->CreateObjFum(CsubCommId)->print();
factory::Instance()->CreateObjFum(CSubAcId)->print();
factory::Instance()->CreateObjFum(CsubCfId)->print();
return 0;
}
运行效果:
CSubCommon.
CSubAc.
CSubCf.
Press any key to continue