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;
    }
  • 相关阅读:
    Android生成自定义二维码
    Android快速实现二维码扫描--Zbar
    设计模式-桥接模式
    设计模式-组合模式
    设计模式-享元模式
    设计模式-适配器模式
    设计模式-装饰者模式
    设计模式-门面(外观)模式
    设计模式-原型模式
    设计模式-单例模式
  • 原文地址:https://www.cnblogs.com/imChay/p/5590233.html
Copyright © 2011-2022 走看看