C++理解面向对象的思想:封装,继承,多态在工厂模式中体现,以计算器为例:加减乘除继承自接口类getResult接口实现获取预算结果
首先创建类似于接口类实现Opera.h:
#pragma once
class COperator
{
public:
COperator(void);
virtual ~COperator(void);
protected:
double numbera;
double numberb;
public:
virtual double getResult() = 0;
double getNumbera(){return numbera;}
double getNumberb(){return numberb;}
};
Opera.cpp
#include "StdAfx.h"
#include "Operator.h"
COperator::COperator(void)
{
}
COperator::~COperator(void)
{
}
继承类加操作实现add.h
#pragma once
#include "Operator.h"
class CAdd : public COperator
{
public:
CAdd(void);
~CAdd(void);
public:
virtual double getResult();
};
add.cpp实现:
#include "StdAfx.h"
#include "Add.h"
CAdd::CAdd(void)
{
}
CAdd::~CAdd(void)
{
}
double CAdd::getResult()
{
return numbera + numberb;
}
减法操作实现 subtraction.h:
#pragma once
#include "Operator.h"
class CSubtraction : public COperator
{
public:
CSubtraction(void);
~CSubtraction(void);
public:
virtual double getResult(){return numbera-numberb;}
};
subtraction.cpp 实现:
#include "StdAfx.h"
#include "Subtraction.h"
CSubtraction::CSubtraction(void)
{
}
CSubtraction::~CSubtraction(void)
{
}
乘除的实现就不列举了,如果再加新的操作,直接继承自接口类实现即可,这样就不用影响其他已经实现的算法操作,直接增加新的操作类即可,接着是比较重要的实现如何使用工厂产生这些操作:
CreateOperato.h实现:
#pragma once
#include "Operator.h"
#include <string>
using namespace std;
class CCreateOperator
{
public:
CCreateOperator(void);
~CCreateOperator(void);
public:
static COperator* creatorOperator(string strOper);
};
CreateOperato.cpp实现:
#include "StdAfx.h"
#include "CreateOperator.h"
#include "Subtraction.h"
#include "Add.h"
CCreateOperator::CCreateOperator(void)
{
}
CCreateOperator::~CCreateOperator(void)
{
}
COperator* CCreateOperator::creatorOperator(string strOper)
{
COperator* pOper = NULL;
if(strOper == "+")
{
pOper = new CAdd;
}else if(strOper == "-")
{
pOper = new CSubtraction;
}
return pOper;
}
main.cpp实现:
#include "stdafx.h"
#include "Operator.h"
#include "CreateOperator.h"
int _tmain(int argc, _TCHAR* argv[])
{
COperator* pOper = CCreateOperator::creatorOperator("+");
pOper->numbera = 1;
pOper->numberb = 2;
double dResult = pOper->getResult();
printf("result:%f",dResult);
return 0;
}
写的太拙劣请大家指正,还有很多地方写的不太好请给出宝贵的建议。