多态的优点:
1、代码组织结构清晰
2、可读性强
3、利于前期和后期的扩展和维护
代码实现:
#include<iostream>
using namespace std;
/*多态的优点:
1、代码组织结构清晰
2、可读性强
3、利于前期和后期的扩展和维护
*/
//分别利于普通和多态来实现计算器
//普通写法
class Calculator
{
public:
int result(string oper)
{
if (oper == "+")
return m_num1 + m_num2;
if(oper=="-")
return m_num1 - m_num2;
if(oper=="*")
return m_num1 * m_num2;
//如果想扩展新功能,需要修改源码
//在真实的开发中, 提倡 开闭原则————对扩展进行开放,对修改进行关闭。
}
int m_num1;
int m_num2;
};
//利用多态实现计算器
//实现计算器的抽象类
class AbstractCalculator
{
public:
virtual int getResult()
{
return 0;
}
int m_num1;
int m_num2;
};
//加法计算器类(多态)
class AddCalculator :public AbstractCalculator
{
public:
int getResult()
{
return m_num1 + m_num2;
}
};
//减法计算器类
class SubCalculator : public AbstractCalculator
{
public:
int getResult()
{
return m_num1 - m_num2;
}
};
//乘法计算器类
class MultiCalculator : public AbstractCalculator
{
public:
int getResult()
{
return m_num1 * m_num2;
}
};
void test01()
{
Calculator c;
c.m_num1 = 20;
c.m_num2 = 10;
cout << c.m_num1 << "+" << c.m_num2 << "=" << c.result("+") << endl;
cout << c.m_num1 << "-" << c.m_num2 << "=" << c.result("-") << endl;
cout << c.m_num1 << "*" << c.m_num2 << "=" << c.result("*") << endl;
}
void test02()
{
//多态使用条件:父类的指针或者对象指向子类对象
AbstractCalculator *cal = new AddCalculator; //创建在堆区,需要释放
cal->m_num1 = 20;
cal->m_num2 = 10;
cout << cal->m_num1 << "+" << cal->m_num2 << "=" << cal->getResult() << endl;
//销毁堆区的数据,指针还在
delete cal;
//减法计算器
cal = new SubCalculator;
cal->m_num1 = 20;
cal->m_num2 = 10;
cout << cal->m_num1 << "-" << cal->m_num2 << "=" << cal->getResult() << endl;
delete cal;
cal = new MultiCalculator;
cal->m_num1 = 20;
cal->m_num2 = 10;
cout << cal->m_num1 << "*" << cal->m_num2 << "=" << cal->getResult() << endl;
//delete cal;
}
int main()
{
//test01();
test02();
system("pause");
return 0;
}