C++多态案例---计算器类

我们要实现的是分别利用普通写法和多态去实现一个能让两个数进行运算的计算器类 

从而比较多态相比普通写法的优势,在实际的c++开发中是非常提倡利用多态去设计程序架构!

先是普通写法的:

#include <iostream>
using namespace std;

class Calculator
{

public:
     int  docalculator(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=10;
    cout<<c.m_num1<<"+"<<c.m_num2<<"= "<<c.docalculator("+")<<endl;
    cout<<c.m_num1<<"-"<<c.m_num2<<"= "<<c.docalculator("-")<<endl;
    cout<<c.m_num1<<"*"<<c.m_num2<<"= "<<c.docalculator("*")<<endl;
}
int main()
{
    test01();
    system("pause");
    return 0;
}

普通的写法,没能很好的体现开闭原则,因为如果想扩展新的功能则需要修改类里的源码,而在实际开发中提倡开闭原则,对扩展开放,对修改关闭。

下面我们来看看利用多态的写法:

#include <iostream>
using namespace std;
//先创建一个基类
class Abstractcalculate
{
public:
    virtual int  docalculate()
    {
        return 0;
    }
    int m_num1;
    int m_num2;

};

//下面一一创建自己需要的
//加法类
class  Addcalculate:public Abstractcalculate
{
    public:
    virtual int  docalculate()
    {
        return m_num1+m_num2;
    }
};

//减法类
class  Subcalculate:public Abstractcalculate
{
    public:
    virtual int  docalculate()
    {
        return m_num1-m_num2;
    }
};

//乘法类
class  Mulcalculate:public Abstractcalculate
{
    public:
    virtual int  docalculate()
    {
        return m_num1*m_num2;
    }
};

void test02()
{
    //实现加法,多态使用条件是父类的指针或对象指向子类,这次我们用指针
    Abstractcalculate  *abc=new Addcalculate; //创建一个父类的指针abc去指向新开辟的addcalculate类的空间
    abc->m_num1=100;
    abc->m_num2=100;
    cout<<abc->m_num1<<"+"<< abc->m_num2<<"="<<abc->docalculate()<<endl;
    //此时自然会执行加法类的函数
    delete abc;   //由于是在堆区开辟的一片空间,用完了了要手动释放
    //
    abc=new Subcalculate;  
    //指针指向的空间被删除了,但是指针还在,而且就是Abstractcalculate类型的
    abc->m_num1=100;
    abc->m_num2=100;
    cout<<abc->m_num1<<"-"<< abc->m_num2<<"="<<abc->docalculate()<<endl;
    delete abc;
    abc=new Mulcalculate;
    abc->m_num1=100;
    abc->m_num2=100;
    cout<<abc->m_num1<<"*"<< abc->m_num2<<"="<<abc->docalculate()<<endl;
    delete abc;
}

int main()
{
 
    test02();
    system("pause");
    return 0;
}

可以感受到多态的好处:
1、组织结构清晰
2、可读性强(以后的开发中,我们可能写代码的时候都没有读代码多,因为一个项目往往是多个人一起做的,所以我们就需要去大量阅读别人的代码,此时如果一个人的代码你一看就读懂了,要知道不是你厉害,大多数时候是写代码的人厉害,因为他能够写的通俗易懂让你看懂)
3、对于前期和后期的拓展和维护性高  很好的体现了开闭原则!

通过此案例,希望大家能切实体会到多态带来的好处,在以后的学习中多多使用多态!
 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值