zoukankan      html  css  js  c++  java
  • 对象作为参数的连续传递

    //
    //  main.m
    //  对象作为参数的连续传递
    
    //    方法的形参,当调用该方法的时候,接收了值,才会给该方法中的形参分配存储空间,
    //    如果传进来了是对象的指针,就保存了对象的地址,也就是指向了那个对象
    #import <Foundation/Foundation.h>
    
    #pragma mark - 弹夹
    //弹夹
    //事物名称: 弹夹(Clip)
    //属性:子弹(Bullet)
    //行为:上子弹(addBullet)
    @interface Clip : NSObject
    {
        @public
        int _bullet; // 子弹的数量
    }
    - (void)addBullet;
    @end
    
    @implementation Clip
    
    - (void)addBullet{
        _bullet=10;
    }
    
    @end
    
    #pragma  mark - 枪
    ////事物名称:枪(Gun)
    //属性:弹夹(clip) , 型号(model)
    //行为:上弹夹(addClip),射击
    @interface Gun : NSObject
    {
    @public
        Clip *_clip;
        int _model;
    }
    - (void)addClip:(Clip*)mClip; // 枪可以接收一个弹夹
    - (void)shoot:(Clip*)mClip; // 枪可以射击,没射击一次,弹夹的子弹数减1
    @end
    
    @implementation Gun
    
    - (void)addClip:(Clip *)mClip{
        _clip=mClip;
    }
    - (void)shoot:(Clip *)mClip{
        if (mClip->_bullet>0) {
            NSLog(@"射击了一次,还剩%i个子弹",--mClip->_bullet);
        }else{
            NSLog(@"没有子弹了,该换弹夹了");
        }
    }
    @end
    
    #pragma mark - 士兵
    //士兵
    //事物名称: 士兵(Soldier)
    //属性:姓名(name), 身高(height), 体重(weight)
    //行为:打枪(fire), 打电话(callPhone)
    //
    @interface Slodier : NSObject
    {
        @public
        NSString *_name;
        int _height;
        int _weight;
    }
    - (void)fire:(Gun*)mGun and:(Clip*)mClip;
    - (void)changeClip:(Gun*)mGun and:(Clip *)mClip;
    - (void)call;
    @end
    
    @implementation Slodier
    
    - (void)fire:(Gun *)mGun and:(Clip *)mClip{
        [mGun shoot:mClip];
    }
    
    - (void)changeClip:(Gun*)mGun and:(Clip *)mClip{
        [mGun addClip:mClip];
    }
    
    -(void)call{
        NSLog(@"士兵打电话了");
    }
    
    @end
    
    
    int main(int argc, const char * argv[]) {
        // 给士兵一个枪,拿到一个弹夹,调用枪的上弹夹的功能,然后射击
        //创建一个弹夹
        Clip *pc=[Clip new];
    //    初始化弹夹对象
        pc->_bullet=5;
        //创建一个枪对象
        Gun *pg=[Gun new];
    //    初始化枪对象
        pg->_clip=pc;
        pg->_model=47;
    //    创建一个士兵对象
        Slodier *ps=[Slodier new];
    //    初始化士兵对象
        ps->_name=@"大兵瑞恩";
        ps->_height=190;
        ps->_weight=100;
        
        [ps fire:pg and:pc];
        [ps fire:pg and:pc];
        [ps fire:pg and:pc];
        [ps fire:pg and:pc];
        [ps fire:pg and:pc];
        [ps fire:pg and:pc];
    
    //    创建一个新的弹夹
        Clip *newPc = [Clip new];
    //    初始化这个新的弹夹
        newPc->_bullet=5;
    //    士兵会换弹夹,会调用枪的换弹夹功能换
        [ps changeClip:pg and:newPc];
    //    继续射击
        NSLog(@"更换弹夹之后,继续射击");
        [ps fire:pg and:newPc];
        
        return 0;
    }
  • 相关阅读:
    GTK+ 3.6.2 发布,小的 bug 修复版本
    RunJS 新增 Echo Ajax 测试功能
    Mozilla 发布 Popcorn Maker,在线创作视频
    Sina微博OAuth2框架解密
    Mina状态机State Machine
    Mozilla 发布 Shumway —— 纯JS的SWF解析器
    Code Browser 4.5 发布,代码浏览器
    ROSA 2012 "Enterprise Linux Server" 发布
    ltrace 0.7.0 发布,程序调试工具
    Artifactory 2.6.5 发布,Maven 扩展工具
  • 原文地址:https://www.cnblogs.com/imChay/p/5590233.html
Copyright © 2011-2022 走看看