多态(C++)

这一篇文章就是帮大家认识一下,使用多态的好处。

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;
}

运行结果大家自己运行看看。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值