--->普通写法:若想扩展新的功能,需要修改源码。
在开发中,提倡开闭原则,对外扩展开放,对内修改关闭
--->多态写法
#include <iostream>
using namespace std;
//抽象计算机类
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 MulCalculator :public AbstractCalculator//乘法
{
public:
int getresult()
{
return m_num1 * m_num2;
}
};
class DivCalculator :public AbstractCalculator//除法
{
public:
int getresult()
{
return m_num1 / m_num2;
}
};
void test02()
{
//多态使用条件:父类指针/引用指向子类对象
AbstractCalculator* abc = new AddCalculator();//加法
abc->m_num1 = 10;
abc->m_num2 = 20;
cout <<abc->m_num1<<"+"<<abc->m_num2<<"="<<abc->getresult() << endl;
delete abc;
abc = new SubCalculator();//减法
abc->m_num1 = 24;
abc->m_num2 = 12;
cout << abc->m_num1 << "-" << abc->m_num2 << "=" << abc->getresult() << endl;
delete abc;
abc = new MulCalculator();//乘法
abc->m_num1 = 3;
abc->m_num2 = 4;
cout << abc->m_num1 << "*" << abc->m_num2 << "=" << abc->getresult() << endl;
delete abc;
abc = new DivCalculator();//除法
abc->m_num1 = 80;
abc->m_num2 = 20;
cout << abc->m_num1 << "/" << abc->m_num2 << "=" << abc->getresult() << endl;
delete abc;
}
int main()
{
test02();
return 0;
}