永发信息网

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

答案:2  悬赏:40  手机版
解决时间 2021-01-06 05:24
老师要求小菜使用面向对象的思想编写一个计算器,可以实现两个数的加、减、乘、除运算
最佳答案
第二天。

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

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

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

大鸟:“那我问你,现在如果我希望增加一个开根(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()方法,这样如果要修改任何一个算法,就不需要提供其他算法的代码了。但问题来了,我如何让计算器知道我是希望用哪一个算法呢?”
全部回答
212
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
15岁的孩子怎么买火车票
从一头小猪开始,养到250斤大概需要多少投入
租客租的我家房子 ,因租客的失误导致水龙头
丁丁问路公交换乘
7分之4比3分之1化简比是多少
谁撞见过父母啪啪啪
我家双开门两抽屉容声冰箱按键灯全部闪烁
净水器显示快接式封闭滤芯是什么意思?
如何做一个让所有人都喜欢的人?
床头太占空,可以换床头吗?
我和老公在成都买了76平房的房子,孩子才刚满
拥有证券从业是否就不需要再考基金从业
邮政报刊亭地址在什么地方,想过去办事,
为什么我用完深海泥脸上会脱皮?
原来德国马克比美元值钱????
推荐资讯
锦鲤吃什么
拼音que分开怎么写是q和ue还是q和ve
小米莲子粥的做法,小米莲子粥怎么做好吃,小
针织冰丝麻料衣服怎么清洗保养
鞋子24.5cm是多少码啊
如何才能让我的 (手机QQ)异地登陆,我现在
Did it ever occur to youyou would give up
装修公司说黑金沙就是磁砖,是这样吗
父亲节70几字的作文
余幼好捡肥皂兮,年即老而不衰,是什么意思
想做个小吃生意,但又不知道哪个小吃吃香,希
保卫萝卜3无限金币攻略 无限金币怎么修改
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?