利用多态实现简易计算器(仅整数运算,可自行修改完善)

一、问题需求:

利用多态的特性,
   1、代码结构清晰;
    2、可读性强;
    3、便于开发前期或后期的修改和维护,可扩展性高。

  初步实现一个简易的计算器,含加减乘除以及求余的功能,仅初步实现,异常处理相关情况可后续慢慢自行添加扩展。

二、额外调用及内容构成

    1.  头文件#include<iomanip> 中的fixed setprecision(保留小数位) 对除法结果保留两位小数;

    2.  系统函数 system("pause")  --> 用于程序暂停缓冲,点击回车即可进行下一步;

    3.  系统函数system("cls");  --> 对界面进行清屏操作,使界面简洁;

4. 构成

1)switch语句 --> 多功能调用

2)while循环 --> 多次进行,提高用户可读性、友好性

3)抽象、具体功能类以及各个功能模块函数的声明、定义以及调用,具体如下:
 

class AbstractCalculator;	//计算器抽象类
class AddCalculator;		//加法类
class SubtrCalculator;	    //减法类
class MultiCalculator;		//乘法类
class DivCalculator;		//除法类
class RemaCalculator;		//取余类
void showMenu();			//菜单
void add_Test(int num1, int num2);	//加法
void subtr_Test(int num1, int num2);	//减法
void multi_Test(int num1, int num2);	//乘法
void div_Test(int num3, int num4);		//除法
void rema_Test(int num1, int num2);	//求余

二、代码实现

/* 简易计算器 */
#include<iostream>
#include<iomanip>

using namespace std;

class AbstractCalculator;	//计算器抽象类
class AddCalculator;		//加法类
class SubtrCalculator;	    //减法类
class MultiCalculator;		//乘法类
class DivCalculator;		//除法类
class RemaCalculator;		//取余类
void showMenu();			//菜单
void add_Test(int num1, int num2);	//加法
void subtr_Test(int num1, int num2);	//减法
void multi_Test(int num1, int num2);	//乘法
void div_Test(int num3, int num4);		//除法
void rema_Test(int num1, int num2);	//求余

int main()
{
	int num1 = 0, num2 = 0, choice;
	double num3 = 0, num4 = 0;
	while (true)
	{
		showMenu();  //展示主页
		cout << "请输入你想进行的运算序号:";
		cin >> choice;
		system("cls");
		if (choice != 0)
			cout << "请输入您想计算的两个数:";

		switch (choice)
		{
		case 1:
			cin >> num1 >> num2;
			add_Test(num1, num2);	//加法
			break;
		case 2:
			cin >> num1 >> num2;
			subtr_Test(num1, num2);	//减法
			break;
		case 3:
			cin >> num1 >> num2;
			multi_Test(num1, num2);	//乘法
			break;
		case 4:
			cin >> num3 >> num4;
			div_Test(num3, num4);	//除法
			break;
		case 5:
			cin >> num1 >> num2;
			rema_Test(num1, num2);	//求余
			break;
		case 0:
			cout << "感谢使用!再见!" << endl;
			return 0;
			break;

		default:
			cout << "Invild Error !" << endl;
			break;
		}
		system("pause");
		system("cls");
	}

	return 0;
}

//主页函数
void showMenu()
{
	cout << "**************************************" << endl;
	cout << "*****欢迎进入简单计算器服务系统!*****" << endl;
	cout << "*****       加法计算请按 1       *****" << endl;
	cout << "*****       减法计算请按 2       *****" << endl;
	cout << "*****       乘法计算请按 3       *****" << endl;
	cout << "*****       除法计算请按 4       *****" << endl;
	cout << "*****       求余计算请按 5       *****" << endl;
	cout << "*****       退出服务请按 0       *****" << endl;
	cout << "**************************************" << endl;

}

//构建计算器抽象类
class AbstractCalculator
{
public:

	virtual int GetResult()		//创建虚函数
	{
		return 0;
	}

	virtual double GetResult2()		//创建虚函数
	{
		return 0;
	}

	int m_Num1;
	int m_Num2;
	double m_Num3;
	double m_Num4;
};


//创建加法计算器
class AddCalculator :public AbstractCalculator
{
public:
	int GetResult()
	{
		return m_Num1 + m_Num2;
	}

};

//创建减法计算器
class SubtrCalculator :public AbstractCalculator
{
public:
	int GetResult()
	{
		return m_Num1 - m_Num2;
	}

};

//创建乘法计算器
class MultiCalculator :public AbstractCalculator
{
public:
	int GetResult()
	{
		return m_Num1 * m_Num2;
	}

};

//创建除法计算器
class DivCalculator :public AbstractCalculator
{
public:
	double GetResult2()
	{
		return m_Num3 / m_Num4;
	}

};

//创建求余计算器
class RemaCalculator :public AbstractCalculator
{
public:
	int GetResult()
	{
		return m_Num1 % m_Num2;
	}

};

//实现多态的条件
//父类的指针或引用 指向子类对象

// 加法测试
void add_Test(int num1, int num2)
{
	AbstractCalculator* calculator01 = new AddCalculator;
	calculator01->m_Num1 = num1;
	calculator01->m_Num2 = num2;
	cout << calculator01->m_Num1 << " + " << calculator01->m_Num2 << " = " << calculator01->GetResult() << endl;

	delete calculator01;
}

// 减法测试
void subtr_Test(int num1, int num2)
{
	AbstractCalculator* calculator02 = new SubtrCalculator;
	calculator02->m_Num1 = num1;
	calculator02->m_Num2 = num2;
	cout << calculator02->m_Num1 << " - " << calculator02->m_Num2 << " = " << calculator02->GetResult() << endl;
	delete calculator02;
}

// 乘法测试
void multi_Test(int num1, int num2)
{
	AbstractCalculator* calculator03 = new MultiCalculator;
	calculator03->m_Num1 = num1;
	calculator03->m_Num2 = num2;
	cout << calculator03->m_Num1 << " x " << calculator03->m_Num2 << " = " << calculator03->GetResult() << endl;
	delete calculator03;
}

// 除法测试
void div_Test(int num3, int num4)
{
	AbstractCalculator* calculator04 = new DivCalculator;
	calculator04->m_Num3 = num3;
	calculator04->m_Num4 = num4;
	cout << calculator04->m_Num3 << " / " << calculator04->m_Num4 << " = " << fixed << setprecision(2) << calculator04->GetResult2() << endl;
	delete calculator04;
}

//求余测试
void rema_Test(int num1, int num2)
{
	AbstractCalculator* calculator05 = new RemaCalculator;
	calculator05->m_Num1 = num1;
	calculator05->m_Num2 = num2;
	cout << calculator05->m_Num1 << " % " << calculator05->m_Num2 << " = " << calculator05->GetResult() << endl;
	delete calculator05;
}

注:代码并不完善,有一些异常处理还未进行,若有需要,可多多研究理解并加以完善,谢谢

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值