这一篇文章就是帮大家认识一下,使用多态的好处。
1、什么是多态?
多态分为两类:
- 静态多态:函数重载和运算符重载属于静态多态,复用函数名。
- 动态多态:原生类和虚函数实现运行时多态。
静态多态和动态多态的区别:
- 静态多态的函数地址早绑定-编译阶段确定函数地址。
- 动态多态的函数地址晚绑定- 运行阶段确定函数地址。
2、多态的优点:
●代码组织结构清晰。
●可读性强。
●利于前期和后期的扩展以及维护。
使用多态时,如果想扩展新的功能,需求修改源码。在真是开发中提倡开闭原则,开闭原则就是对扩展进行开放,对修改进行关闭。
b站上的有个多态案例还挺好的——计算机类。
代码展示:
#include<iostream>
using namespace std;
//普通写法
class Calculater
{
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;
};
//多态写法
class AbstractCalculater
{
public:
virtual int getResult() //virtual的作用是为了子类能够写
{
return 0;
}
int m_Num1;
int m_Num2;
};
//加法计算器
class AddCalculater :public AbstractCalculater
{
int getResult()
{
return m_Num1 + m_Num2;
}
};
//减法计算器
class SulCalculater :public AbstractCalculater
{
int getResult()
{
return m_Num1 - m_Num2;
}
};
//乘法计算器
class MuCalculater :public AbstractCalculater
{
int getResult()
{
return m_Num1 * m_Num2;
}
};
void test01()
{
Calculater C;
C.m_Num1 = 100;
C.m_Num2 = 200;
cout << C.m_Num1 << "+" << C.m_Num2 << "=" << C.getResult("+") << endl;
cout << C.m_Num1 << "+" << C.m_Num2 << "=" << C.m_Num1 - C.m_Num2 << endl;
}
void test02()
{
//父类指针或引用指向子类对象
AbstractCalculater* abc = new AddCalculater;
//加法运算
abc->m_Num1 = 10;
abc->m_Num2 = 10;
cout << abc->m_Num1 << "+" << abc->m_Num2 << "=" << abc->getResult() << endl;
//用完后记得销毁
delete abc;
//减法计算
abc = new SulCalculater;
abc->m_Num1 = 10;
abc->m_Num2 = 10;
cout << abc->m_Num1 << "-" << abc->m_Num2 << "=" << abc->getResult() << endl;
delete abc;
//乘法计算
abc = new MuCalculater;
abc->m_Num1 = 10;
abc->m_Num2 = 10;
cout << abc->m_Num1 << "*" << abc->m_Num2 << "=" << abc->getResult() << endl;
delete abc;
}
int main()
{
//test01(); //普通实现
test02(); //多态实现
system("pause");
return 0;
}
运行结果大家自己运行看看。