我们要实现的是分别利用普通写法和多态去实现一个能让两个数进行运算的计算器类
从而比较多态相比普通写法的优势,在实际的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、对于前期和后期的拓展和维护性高 很好的体现了开闭原则!
通过此案例,希望大家能切实体会到多态带来的好处,在以后的学习中多多使用多态!