#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
using namespace std;
//开闭原则:增加功能是通过增加代码来实现的,而不是去修改源代码来实现的
class Caculator
{
public:
Caculator(int a, int b, string moperator)
{
this->m_a = a;
this->m_b = b;
this->m_operator = moperator;
}
int getResult()
{
if (m_operator.compare("+") == 0)
return m_a + m_b;
else if (m_operator.compare("-") == 0)
return m_a - m_b;
else if (m_operator.compare("*") == 0)
return m_a * m_b;
else if (m_operator.compare("/") == 0)
return m_a / m_b;
}
private:
int m_a;
int m_b;
string m_operator;
int m_ret;
};
///改进 写一个抽象类
class AbstractCaculator
{
public:
virtual int getResult() = 0;
virtual void setOperatorNumber(int a, int b) = 0;
};
//加法计算器类
class PlusCaculator :public AbstractCaculator
{
public:
virtual void setOperatorNumber(int a, int b)
{
this->mA = a;
this->mB = b;
}
virtual int getResult()
{
return mA + mB;
}
public:
int mA;
int mB;
};
///剑法计算器类
class SubCaculator :public AbstractCaculator
{
public:
virtual void setOperatorNumber(int a, int b)
{
this->mA = a;
this->mB = b;
}
virtual int getResult()
{
return mA - mB;
}
public:
int mA;
int mB;
};
///乘法
void test0()
{
Caculator* caculator = new Caculator(10, 20, "+");
cout << caculator->getResult() << endl;
}
void test01()
{
AbstractCaculator* caculator = new PlusCaculator;
caculator->setOperatorNumber(10, 20);
//caculator->getResult();
cout << "ret:" << caculator->getResult() << endl;
delete caculator;
}
int main(void)
{
test01();
system("pause");
return 0;
}