其他分享
首页 > 其他分享> > 多态案例-计算器类笔记

多态案例-计算器类笔记

作者:互联网

多态案例-计算器类


案列描述:
分别利用普通写法和多态技术,设计实现两个操作数进行运算的计算器类
多态的优点:
1.代码组织结构清晰
2.可读性强
3.利于前期和后期的扩展维护

普通实现

#include <iostream>
using namespace std;
#include <string>
//分别利用普通写法和多态技术实现计算器

//普通写法
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;//操作数1
	int m_Num2;//操作数2
};
void test01()
{
	//创建计算器对象
	Calculator c;
	c.m_Num1 = 10;
	c.m_Num2 = 10;
	cout << c.m_Num1 << "+" << c.m_Num2 << "=" << c.getResult("+") << endl;
	cout << c.m_Num1 << "-" << c.m_Num2 << "=" << c.getResult("-") << endl;
	cout << c.m_Num1 << "*" << c.m_Num2 << "=" << c.getResult("*") << endl;
}
int main()
{
	test01();
	system("pause");
}

多态实现

//利用多态实现计算器
//实现计算器抽象类
class AbstractCalculator
{
public:
	virtual int getResult()
	{
		return 0;
	}
	int m_Num1;
	int m_Num2;
};
//加法计算器类
class AddCalculator :public AbstractCalculator
{
public:
	 int getResult()
	{
		 return m_Num1 + m_Num2;
	}
};
//减法的计算器类
class SubCalculator :public AbstractCalculator
{
public:
	int getResult()
	{
		return m_Num1 - m_Num2;
	}
};
//乘法的计算器类
class MulCalculator :public AbstractCalculator
{
public:
	int getResult()
	{
		return m_Num1 * m_Num2;
	}
};
void test02()
{
	//多态的使用条件
	//父类指针或者引用指向子类对象
	//加法运算
	AbstractCalculator* abc = new AddCalculator;
	abc->m_Num1 = 10;
	abc->m_Num2 = 10;
	cout << abc->m_Num1 << "+" << abc->m_Num2 << "="<<abc->getResult() << endl;
	//用完后记得销毁
	delete abc;
	//减法运算
	abc = new SubCalculator;
	abc->m_Num1 = 10;
	abc->m_Num2 = 10;
	cout << abc->m_Num1 << "-" << abc->m_Num2 <<"="<< abc->getResult() << endl;
	delete abc;
	//乘法运算
	abc = new MulCalculator;
	abc->m_Num1 = 10;
	abc->m_Num2 = 10;
	cout << abc->m_Num1 << "*" << abc->m_Num2 << "=" << abc->getResult() << endl;
}
int main()
{
	test02;
	system("pause");
}

标签:Num1,Num2,int,多态,笔记,getResult,计算器
来源: https://blog.csdn.net/m0_51174487/article/details/111059897