您的位置:首页 > 其它

大话设计模式学习(一)——简单工厂模式

2009-11-14 18:24 260 查看


#pragma once

#include <afx.h>
#include <iostream>

using namespace std;
/*
*	运算类
*/
class MyOperation
{
public:
double NumberA;
double NumberB;
public:
inline virtual double GetResult(){return 0;}
};
/*
*	加减乘除类
*/
class OperationAdd:public MyOperation
{
inline double GetResult()
{
double Result=NumberA+NumberB;
return Result;
}
};
class OperationSub:public MyOperation
{
inline double GetResult()
{
double Result=NumberA-NumberB;
return Result;
}
};
class OperationMul:public MyOperation
{
inline double GetResult()
{
double Result=NumberA*NumberB;
return Result;
}
};
class OperationDiv:public MyOperation
{
inline double GetResult()
{
if (NumberB==0)
{
throw;
}
double Result=NumberA/NumberB;
return Result;
}
};
/*
*	简单运算工厂类
*/
class OperationFactory
{
public:
inline static MyOperation* creatOperation(CHAR strOperation)
{
MyOperation* oper=NULL;
switch(strOperation)
{
case '+':
oper =new OperationAdd();
break;
case '-':
oper =new OperationDiv();
break;
case '*':
oper =new OperationMul();
break;
case '/':
oper =new OperationDiv();
break;
}
return oper;
}
};


主程序:

void main(int argc,char*argv[])
{
MyOperation* oper;
char putIn=*argv[2];
oper=OperationFactory::creatOperation(putIn);
if(!oper)
return;
oper->NumberA=atoi(argv[1]);
oper->NumberB=atoi(argv[3]);
double dResult=oper->GetResult();
cout<<dResult<<endl;
}


这里遇见两个问题:

1. 头文件中需包含afx.h头文件才能使用CString类,而如果要使用string,则需包含以下几个头文件

#include <string.h>
#include <iostream>
using namespace std;


2,在编译时产生了

nafxcwd.lib(afxmem.obj) :error LNK2005:

"void * __cdecl operator new(unsigned int)"(??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj) 的错误,这种错误是设计导致的,使用 MFC 库时,务必先链接它们,然后再链接 CRT 库。解决方法:

通过确保项目中的每个文件都首先包含 Msdev/Mfc/Include/Afx.h 来完成,即首先include Afx头文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: