#include<iostream>
using namespace std;
#include<string>
//分别利用普通写法和多态技术实现计算器
//普通写法
class Calculator
{
public:
double getresult(string oper)
{
if (oper == "+")
{
return a + b;
}
else if (oper == "-")
{
return a - b;
}
else if (oper == "*")
{
return a*b;
}
//如果想扩展新的功能,需要修改源码
//在真实的开发中提倡开闭原则
//开闭原则:对扩展进行开放,对修改进行关闭
}
int a;
int b;
};
//利用多态实现计算器
//多态好处:
//1.组织结构清晰
//2.可读性强
//3.对于前期和后期扩展以及维护性高
//实现计算器抽象类
class AbstractCalculator
{
public:
virtual int getresult()
{
return 0;
}
int a, b;
};
//加法计算器类
class AddCalculator :public AbstractCalculator
{
public:
virtual int getresult()
{
return a+b;
}
};
//减法计算器类
class SubCalculator :public AbstractCalculator
{
public:
virtual int getresult()
{
return a - b;
}
};
//乘法计算器类
class MulCalculator :public AbstractCalculator
{
public:
virtual int getresult()
{
return a * b;
}
};
void test1()
{
Calculator c;
c.a = 6;
c.b = 2;
cout << c.a << "+" << c.b << "=" << c.getresult("+") << endl;
}
void test2()
{
//多态使用条件
//父类指针或引用指向子类对象
//加法运算
AbstractCalculator *abc = new AddCalculator;
abc->a = 3;
abc->b = 4;
cout << abc->a << "+" << abc->b << "=" << abc->getresult() << endl;
//用完后记得销毁
delete abc;
//减法运算
abc = new SubCalculator;
abc->a = 3;
abc->b = 4;
cout << abc->a << "-" << abc->b << "=" << abc->getresult() << endl;
delete abc;
//乘法运算
abc = new MulCalculator;
abc->a = 3;
abc->b = 4;
cout << abc->a << "8" << abc->b << "=" << abc->getresult() << endl;
delete abc;
}
int main()
{
test1();
test2();
system("pause");
return 0;
}