优秀的编程知识分享平台

网站首页 > 技术文章 正文

多态案例——计算器类

nanyue 2024-12-31 13:38:08 技术文章 3 ℃

分别利用普通写法和多态技术,设计实现两个操作数进行运算的计算器类

多态的优点:

代码组织结构清晰

可读性强

利用前期和后期的扩展以及维护

//普通写法
class Calculator
{
public:
	int getResult(string oper)
	{
		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;
}
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_Num1;
	}
};
//减法计算器类
class SubCalculator :public AbstractCalculator
{
public:
	int  getResult()
	{
		return m_Num1 - m_Num1;
	}
};
//乘法计算器类
class MulCalculator :public AbstractCalculator
{
public:
	int  getResult()
	{
		return m_Num1 * m_Num1;
	}
};

void test02()
{
	//多态使用条件
	//父类指针或者引用指向子类对象
	//加法运算
	AbstractCalculator *abc = new AddCalculator;
	abc->m_Num1 = 100;
	abc->m_Num2 = 100;
    cout << abc->m_Num1 << "+" << abc->m_Num2 << "=" << abc->getResult() << endl;
	//用完后记得销毁
	delete abc;
	//减法运算
	abc = new SubCalculator;
	abc->m_Num1 = 100;
	abc->m_Num2 = 100;
	cout << abc->m_Num1 << "-" << abc->m_Num2 << "=" << abc->getResult() << endl;
	delete abc;

	//乘法运算
	abc = new MulCalculator;
	abc->m_Num1 = 100;
	abc->m_Num2 = 100;
	cout << abc->m_Num1 << "*" << abc->m_Num2 << "=" << abc->getResult() << endl;
	delete abc;

}

多态好处

组织结构清晰

可读性强

对于前期和后期扩展以及维护性高

Tags:

最近发表
标签列表