A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhs 中级黑马   /  2014-7-12 19:30  /  1493 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zhs 于 2014-7-12 19:33 编辑

在OC类和对象部分第14个视频中MJ老师讲到比较两辆车对象速度的练习,MJ老师在compareWithOther方法中定义了一个其他车对象的指针为方法的参数,在调用此方法比较的时候传进来一个其他车的对象指针,返回速度差。
我的疑问是:为什么不把compareWithOther方法的参数直接定义为int other speed,调用的时候直接传入其他车的速度other->speed,因为不管定义哪种参数,在主函数main中都要new两个车对象,我编程测试了下,是可以的,但MJ老师那样定义方法的参数一定有他的道理,请学过这块的同学谈谈你的看法,灰常感谢

11 个回复

倒序浏览
不明白你在纠结什么
你传一个spped 跟传一个对象 你觉得哪里不一样了吗?还是你觉得传一个seed效率更高?
MJ老师传一个对象进来,再取出对象的speed进行比较
而你的做法是先在外面把speed取出来,再传进去比较而已
回复 使用道具 举报
huangqiwa 发表于 2014-7-12 19:51
不明白你在纠结什么
你传一个spped 跟传一个对象 你觉得哪里不一样了吗?还是你觉得传一个seed效率更高?
M ...

你说的对,但这两种不同的作法应该有利弊点,我想知道就是这个利弊
回复 使用道具 举报
compareWithOther方法,是对象方法,加入了面向对象的思想,那你的问题就变成了 面向对象和面向过程的 利弊,这个有待自己深入理解。
回复 使用道具 举报
你说的指针,其实就是一个地址,OC中实例化对象后,都需要一个指针变量来指向它,然后通过指针来操作这个对象,楼主所说用指针为参数时,不必要再定义一个整型变量来获取车对象的speed属性,再传递给compare方法,而是直接用指针操作车对象,中间省去一层,意味着程序运行时不需要为你新定义的整型变量开辟内存,更高效!
回复 使用道具 举报
温天恩 发表于 2014-7-13 09:04
你说的指针,其实就是一个地址,OC中实例化对象后,都需要一个指针变量来指向它,然后通过指针来操作这个对 ...

直接传指针也要开辟空间啊。调用带参数的方法都要开辟栈空间的。
回复 使用道具 举报
lz的问题,我觉得直接传入对象更好地体现了隐藏实现细节的思想(当然这个思想也不是面向对象的专利,我们用函数封装操作过程也是一种隐藏细节)。对车类的使用者来说,他不需要知道compareWith方法具体如何比较车速,因为车类最清楚该怎么比较。而有了隐藏实现细节,车类的设计者就可以在不干扰使用者的情况下,改变车类的内部设计,只要对外暴露的接口(方法)不改变。比如,某天车类设计者决定不用speed而用speeds来表示速度,那么你之前传入car.speed的代码就失效了,而直接传入车对象的代码则完全不受影响。
回复 使用道具 举报
邱蚓 中级黑马 2014-7-13 12:30:41
8#
我觉得这是一个关于面向对象跟面向过程的区别
回复 使用道具 举报
小海 中级黑马 2014-7-13 13:30:30
9#
楼上各位说的很清楚了,受益匪浅
回复 使用道具 举报
傘が咲く 发表于 2014-7-13 07:24
compareWithOther方法,是对象方法,加入了面向对象的思想,那你的问题就变成了 面向对象和面向过程的 利弊 ...

就差分了,版主把我之前的帖子加加呗XD
回复 使用道具 举报
zhs 中级黑马 2014-7-13 13:58:56
11#
fantacyleo 发表于 2014-7-13 10:28
lz的问题,我觉得直接传入对象更好地体现了隐藏实现细节的思想(当然这个思想也不是面向对象的专利,我们用 ...

谢谢你的回答,鞭辟入里,入木三分~
回复 使用道具 举报
zhs 中级黑马 2014-7-13 14:00:50
12#
傘が咲く 发表于 2014-7-13 07:24
compareWithOther方法,是对象方法,加入了面向对象的思想,那你的问题就变成了 面向对象和面向过程的 利弊 ...

嗯,你说的对,是面向对象和面向对象思想的差别,感谢~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马