-
多态的好处:
1、组织结构清晰
2、可读性强
3、对于前期和后期扩展以及维护性高 -
多态使用条件
父类指针或引用指向子类
#include<iostream>
using namespace std;
#include<string>
//利用普通写法进行不同操作,会在出现bug时修改代码,可读性差
class Calculator
{
public:
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;
}
}
int m_Num1;
int m_Num2;
};
void test01()
{
Calculator c;
c.m_Num1 = 10;
c.m_Num2 = 20;
cout <<c.getResult("+")<<endl;
cout <<c.getResult("-")<<endl;
cout <<c.getResult("*")<<endl;
}
//在真实开发中 提倡 开闭原则
//对扩展进行开放 对修改进行关闭
//利用多态实现计算器
//多态的好处:
//1、组织结构清晰
//2、可读性强
//3、对于前期和后期扩展以及维护性高
//实现计算机抽象类
class AbstractCalculator
{
public:
//虚函数
virtual int geteResult()
{
return 0;
}
int m_Num1;
int m_Num2;
};
//加法运算
class AddCalzulator:public AbstractCalculator
{
public:
int geteResult()
{
return m_Num1+m_Num2;
}
};
//减法运算
class SubCalzulator:public AbstractCalculator
{
public:
int geteResult()
{
return m_Num1-m_Num2;
}
};
//乘法运算
class MulCalzulator:public AbstractCalculator
{
public:
int geteResult()
{
return m_Num1*m_Num2;
}
};
void test02()
{
//多态使用条件
//父类指针或引用指向子类
AbstractCalculator *abc = new AddCalzulator;//相当于创建了一个AddCalculator的对象,AbstractCalculator的abc指针指向这个对象
abc->m_Num1 = 90;
abc->m_Num2 = 8;
cout << abc->geteResult() <<endl;
delete abc;
abc = new SubCalzulator;//销毁了abc的堆区数据,指针类型不变
abc->m_Num1 = 90;
abc->m_Num2 = 8;
cout << abc->geteResult() <<endl;
delete abc;
abc = new MulCalzulator;
abc->m_Num1 = 90;
abc->m_Num2 = 8;
cout << abc->geteResult() <<endl;
delete abc;
}
int main()
{
//test01();
test02();
return 0;
}