多态的优点:
- 代码组织结构清晰
- 可读性强
- 利于前期和后期的扩展以及维护 对拓展开放,对修改关闭
#include <iostream>
#include <string>
using namespace std;
//普通写法
class Calculator
{
public:
int m_num1;
int m_num2;
Calculator(int num_1, int num_2)
{
m_num1=num_1;
m_num2=num_2;
}
int getResult(string oper)
{
if(oper=="+")
return m_num1+m_num2;
else if(oper=="-")
return m_num1-m_num2;
else if(oper=="*")
return m_num1*m_num2;
else if(oper=="/")
return m_num1/m_num2;
else
{
cout<<"请输入“+ - * /”四则运算:";
return NULL;
}
}
};
//多态写法
class AbstractCalculator
{
public:
int m_num1;
int m_num2;
virtual int getResult()
{
return 0;
}
};
class AddCalculator:public AbstractCalculator
{
int getResult()
{
return m_num1+m_num2;
}
};
class SubCalculator:public AbstractCalculator
{
int getResult()
{
return m_num1-m_num2;
}
};
class MulCalculator:public AbstractCalculator
{
int getResult()
{
return m_num1*m_num2;
}
};
class DevCalculator:public AbstractCalculator
{
int getResult()
{
return m_num1/m_num2;
}
};
void test01() //普通写法
{
Calculator c(10,10);
cout<<c.getResult("+")<<endl;
cout<<c.getResult("-")<<endl;
cout<<c.getResult("*")<<endl;
cout<<c.getResult("/")<<endl;
cout<<c.getResult("&")<<endl;
}
void test02() //多态写法
{
AbstractCalculator *abc=new AddCalculator;
abc->m_num1=10;
abc->m_num2=10;
cout<<abc->getResult()<<endl;
delete abc;
abc=new SubCalculator;
abc->m_num1=10;
abc->m_num2=10;
cout<<abc->getResult()<<endl;
delete abc;
abc=new MulCalculator;
abc->m_num1=10;
abc->m_num2=10;
cout<<abc->getResult()<<endl;
delete abc;
}
int main()
{
// test01();
test02();
return 0;
}