黑马程序员技术交流社区

标题: 日课24 OC对象作为方法参数连续传递 [打印本页]

作者: 黑白世界    时间: 2015-10-9 22:46
标题: 日课24 OC对象作为方法参数连续传递
士兵开枪,设计子弹:
类分析:
1.弹夹
属性:口径,子弹数量
2.枪
属性:枪型号
行为:射击
3.士兵
属性:姓名,生命值
行为:开火
实现代码如下:
  1. #import <Foundation/Foundation.h>

  2. #pragma mark 弹夹类
  3. @interface BulletBox:NSObject
  4. {
  5.     @public
  6.     NSString *_size;
  7.     int _bulletCount;
  8. }
  9. @end

  10. @implementation BulletBox
  11. @end


  12. #pragma mark 枪类
  13. @interface Gun:NSObject
  14. {
  15.     @public
  16.     NSString *_size;
  17. }
  18. -(void) shoot:(BulletBox *)bulletbox;
  19. @end

  20. @implementation Gun
  21. -(void) shoot:(BulletBox *)bulletbox{
  22.     if(bulletbox->_bulletCount>0){
  23.         bulletbox->_bulletCount--;
  24.         NSLog(@"\n开枪射击,嘭...(枪的型号:%@,子弹口径:%@,剩余子弹:%d)",_size,bulletbox->_size,bulletbox->_bulletCount);
  25.     }else{
  26.         NSLog(@"\n没有子弹了,请更换弹夹!!");
  27.     }
  28. }
  29. @end


  30. #pragma mark 士兵类
  31. @interface Soldier:NSObject
  32. {
  33.     @public
  34.     NSString *_name;
  35.     int _life;
  36. }
  37. -(void) fire:(Gun *)gun and:(BulletBox *)bulletbox;
  38. @end

  39. @implementation Soldier
  40. -(void) fire:(Gun *)gun and:(BulletBox *)bulletbox{
  41.     [gun shoot:bulletbox];
  42. }
  43. @end

  44. #pragma mark -
  45. int main(int argc, const char * argv[]) {
  46.     @autoreleasepool {
  47.         //实例化弹夹
  48.         BulletBox *bulletbox = [BulletBox new];
  49.         bulletbox->_size = @"0.5mm";
  50.         bulletbox->_bulletCount = 5;
  51.         
  52.         //实例化枪
  53.         Gun *gun = [Gun new];
  54.         gun->_size = @"AK47";
  55.         
  56.         //实例化士兵
  57.         Soldier *soldier = [Soldier new];
  58.         soldier->_name = @"卫龙";
  59.         soldier->_life = 100;
  60.         //连开7枪
  61.         [soldier fire:gun and:bulletbox];
  62.         [soldier fire:gun and:bulletbox];
  63.         [soldier fire:gun and:bulletbox];
  64.         [soldier fire:gun and:bulletbox];
  65.         [soldier fire:gun and:bulletbox];
  66.         [soldier fire:gun and:bulletbox];
  67.         [soldier fire:gun and:bulletbox];
  68.         
  69.         
  70.     }
  71.     return 0;
  72. }
复制代码
运行结果:
2015-10-09 22:30:37.395 3-OC对象作为方法的参数连续传递[791:27789]
开枪射击,嘭...(枪的型号:AK47,子弹口径:0.5mm,剩余子弹:4)
2015-10-09 22:30:37.396 3-OC对象作为方法的参数连续传递[791:27789]
开枪射击,嘭...(枪的型号:AK47,子弹口径:0.5mm,剩余子弹:3)
2015-10-09 22:30:37.396 3-OC对象作为方法的参数连续传递[791:27789]
开枪射击,嘭...(枪的型号:AK47,子弹口径:0.5mm,剩余子弹:2)
2015-10-09 22:30:37.396 3-OC对象作为方法的参数连续传递[791:27789]
开枪射击,嘭...(枪的型号:AK47,子弹口径:0.5mm,剩余子弹:1)
2015-10-09 22:30:37.396 3-OC对象作为方法的参数连续传递[791:27789]
开枪射击,嘭...(枪的型号:AK47,子弹口径:0.5mm,剩余子弹:0)
2015-10-09 22:30:37.396 3-OC对象作为方法的参数连续传递[791:27789]
没有子弹了,请更换弹夹!!
2015-10-09 22:30:37.396 3-OC对象作为方法的参数连续传递[791:27789]
没有子弹了,请更换弹夹!!

结果分析:
bulletbox对象作为参数传递给了fire方法,通过fire方法又传递给了方法shoot方法。实现了对象作为方法参数的连续传递。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2