老师要求小菜使用面向对象的思想编写一个计算器,可以实现两个数的加、减、乘、除运算 20

使用面向对象的思想编写一个计算器,可以实现两个数的加,减,乘,除运算... 使用面向对象的思想编写一个计算器,可以实现两个数的加,减,乘,除运算 展开
 我来答
贡程123
2008-11-14 · TA获得超过391个赞
知道答主
回答量:131
采纳率:0%
帮助的人:0
展开全部
第二天。

小菜问道:“你说计算器这样的小程序还可以用到面向对象三大特性?继承和多态怎么可能用得上,我实在不能理解。”

大鸟:“小菜很有钻研精神嘛,好,今天我让你功力加深一级。你先要考虑一下,你昨天写的这个代码,能否做到很灵活的可修改和扩展呢?”

小菜:“我已经把业务和界面分离了呀,这不是很灵活了吗?”

大鸟:“那我问你,现在如果我希望增加一个开根(sqrt)运算,你如何改?”

小菜:“那只需要改Operation类就行了,在switch中加一个分支就行了。”

大鸟:“问题是你要加一个平方根运算,却需要让加减乘除的运算都得来参与编译,如果你一不小心,把加法运算改成了减法,这岂不是大大的糟糕。打个比方,如果现在公司要求你为公司的薪资管理系统做维护,原来只有技术人员(月薪),市场销售人员(底薪+提成),经理(年薪+股份)三种运算算法,现在要增加兼职工作人员(时薪)的算法,但按照你昨天的程序写法,公司就必须要把包含原三种算法的运算类给你,让你修改,你如果心中小算盘一打,‘TMD,公司给我的工资这么低,我真是郁闷,这下有机会了’,于是你除了增加了兼职算法以外,在技术人员(月薪)算法中写了一句

if (员工是小菜)

{

salary = salary * 1.1;

}

那就意味着,你的月薪每月都会增加10%(小心被抓去坐牢),本来是让你加一个功能,却使得原有的运行良好的功能代码产生了变化,这个风险太大了。你明白了吗?”

小菜:“哦,你的意思是,我应该把加减乘除等运算分离,修改其中一个不影响另外的几个,增加运算算法也不影响其他代码,是这样吗?”

大鸟:“自己想去吧,如何用继承和多态,你应该有感觉了。”

小菜:“OK,我马上去写。”

Operation运算类

public class Operation

{

private double _numberA = 0;

private double _numberB = 0;

public double NumberA

{

get { return _numberA; }

set { _numberA = value; }

}

public double NumberB

{

get { return _numberB; }

set { _numberB = value; }

}

public virtual double GetResult()

{

double result = 0;

return result;

}

}

加减乘除类

class OperationAdd : Operation

{

public override double GetResult()

{

double result = 0;

result = NumberA + NumberB;

return result;

}

}

class OperationSub : Operation

{

public override double GetResult()

{

double result = 0;

result = NumberA - NumberB;

return result;

}

}

class OperationMul : Operation

{

public override double GetResult()

{

double result = 0;

result = NumberA * NumberB;

return result;

}

}

class OperationDiv : Operation

{

public override double GetResult()

{

double result = 0;

if (NumberB==0)

throw new Exception("除数不能为0。");

result = NumberA / NumberB;

return result;

}

}

小菜:“大鸟哥,我按照你说的方法写出来了一部分,首先是一个运算类,它有两个Number属性,主要用于计算器的前后数,然后有一个虚方法GetResult(),用于得到结果,然后我把加减乘除都写成了运算类的子类,继承它后,重写了GetResult()方法,这样如果要修改任何一个算法,就不需要提供其他算法的代码了。但问题来了,我如何让计算器知道我是希望用哪一个算法呢?”
pleasech
2008-11-14 · 贡献了超过127个回答
知道答主
回答量:127
采纳率:0%
帮助的人:28.7万
展开全部
212
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式