zoukankan      html  css  js  c++  java
  • OC基础--对象做参数在方法间传递

    剧情描述:

        美国大兵抗把汉阳造 拿着5个弹夹(每个弹夹5发子弹) 带着弟兄们干架 子弹打完了就求救 

    类:

        士兵:

            属性: 姓名(_name) 身高(_height) 体重(_weight)

            行为: 开枪(fire) 求救(callForHelp) 

        枪:

            属性: 弹夹(_clip) 弹夹数量(_clipNum) 品牌(_model)

            行为: 换弹夹(changeClip) 发射子弹(shot) 

        弹夹:

            属性: 子弹数量(_bulletCount)

            行为: 装子弹(addBullet)

    方法说明:

        士兵开枪方法(fire) 

            参数: 枪 和 弹夹

            返回值: 剩余弹夹数量

            逻辑: 将弹夹作为参数  调用枪的发射子弹方法(shot) 获得剩余弹夹数   

                如果剩余弹夹数 == 0 则调用自己的求救方法(callForHelp) 

        枪发射子弹方法(shot)

            参数: 弹夹

            返回值: 弹夹数

            逻辑: 如果弹夹里的子弹==0 则调用自己的换弹夹的方法获得新弹夹  否则弹夹子弹减1 

        枪换弹夹方法(changeClip)

            参数: 弹夹

            返回值: 弹夹数量

            逻辑: 将弹夹数量-1(因为已经用了一个了) 如果还有弹夹 则调用弹夹的装子弹方法 否则提示子弹打光了 

        弹夹装子弹方法(addBullet)

            参数: 无

            返回值: 弹夹对象

            逻辑: 如果弹夹内子弹数量==0 则装5发子弹  然后将弹夹返回 

    对象去哪了:

        士兵开枪接收了枪和弹夹对象  开枪方法中将弹夹对象传入枪的发射子弹方法  发射子弹方法中又将弹夹对象传入换弹夹方法  换弹夹方法中调用这个弹夹对象的加子弹方法  获得一个弹夹对象的返回值  返回的这个弹夹对象 嘿嘿  不好意思 没用到

    弹夹类声明文件Clip.h:

    /*
     弹夹
     事物名称: 弹夹(Clip)
     属性:子弹数量(_bulletCount)
     行为:装子弹(addBullet)
     */
    #import <Foundation/Foundation.h>
    
    @interface Clip : NSObject
    {
        @public
        // 子弹数量
        int _bulletCount;
    }
    //给弹夹装子弹
    - (Clip *) addBullet;
    @end 

    弹夹类实现文件Clip.m:

    #import "Clip.h" 
    
    @implementation Clip 
    
    // 给弹夹装子弹  假设装一次 弹夹就少一个(代表换弹夹)  返回弹夹对象其实没被用到
    - (Clip *)addBullet{
        if(_bulletCount == 0){
            _bulletCount = 5;
            NSLog(@"clip  新兵蛋子  子弹装好了  你去冲吧  子弹数量:%i", self->_bulletCount);
        }
        return self;
    }
    @end

    枪类声明文件Gun.h:

    /*
     枪
     事物名称:枪(Gun)
     属性:大弹夹(_bigClip) , 弹夹数量(_clipNum),  型号(model)
     行为:换弹夹(changeClip) 射击(shot)
     */
    #import <Foundation/Foundation.h>
    #import "Clip.h" 
    
    @interface Gun : NSObject
    {
        @public
        // 弹夹对象
        Clip* _bigClip;
        // 弹夹数量
        int _clipNum;
        // 枪的牌子
        NSString* _model;
    }
    // 换弹夹方法
    - (int) changeClip:(Clip *) newClip;
    // 发射子弹方法
    - (int) shot:(Clip *) clip;
    @end

    枪类实现文件Gun.m:

    #import "Gun.h" 
    
    @implementation Gun
    // 换弹夹方法 接收弹夹对象  返回弹夹数量
    - (int)changeClip:(Clip *)clip{
        // 需要换弹夹说明已经用了一个了  弹夹数量 -1
        _clipNum -= 1;    
        // 如果还有弹夹 则调用弹夹加子弹的方法
        if (_clipNum > 0) {
            _bigClip = [clip addBullet];
            NSLog(@"gun  装弹完毕 子弹数量:%i 继续干", clip->_bulletCount);
        }
        else{
            NSLog(@"gun 子弹打光了");
        }
        return _clipNum;
    } 
    // 枪发射子弹方法  接收弹夹对象  返回弹夹数量
    - (int)shot:(Clip *)clip{
        // 变量存储弹夹数量  (可以不用这个变量  直接使用属性成员)
        int clipNum = _clipNum;   
        // 如果弹夹内没子弹了  则调用换弹夹方法
        if (clip->_bulletCount == 0) {
            NSLog(@"gun  友情提示: 大哥 你没子弹了  俺去给你装弹  你先拼会刺刀吧  装好了再通知你  好吗  就这么愉快的决定吧");
            clipNum = [self changeClip:clip];
        }
        // 否则 子弹 -1
        else{
            NSLog(@"gun  子弹 减 1");
            clip->_bulletCount -= 1;
        }
        return clipNum;
    }
    @end

    士兵类声明文件Soldier.h:

    /*
     士兵
     事物名称: 士兵(Soldier)
     属性:姓名(name), 身高(height), 体重(weight)
     行为:打枪(fire), 打电话(callPhone)
     */
    #import <Foundation/Foundation.h>
    #import "Gun.h" 
    
    @interface Soldier : NSObject
    {
        @public
        NSString* _name;
        double _height;
        double _weight;
    }
    - (int) fireWithGun:(Gun*) gun andClip:(Clip *) clip;
    - (void) callForHelp;
    @end

    士兵类实现文件Soldier.m:

    #import "Soldier.h" 
    
    @implementation Soldier 
    // 士兵开枪  接收枪和弹夹两个对象  返回弹夹剩余数
    - (int)fireWithGun:(Gun *)gun andClip:(Clip *)clip{
        NSLog(@"soldier  儿子们 孙子们 王八羔子们  都跟我一起上  冲啊  杀鸡鸡~~~");   
        // 将弹夹对象传入 调用枪射击的方法
        int remainClipNum = [gun shot: clip];    
        // 如果没弹夹了  调用求救方法
        if(0 == remainClipNum){
            [self callForHelp];
        }
        return remainClipNum;
    } 
    - (void)callForHelp{
        NSLog(@"soldier  拐洞拐  我没子弹了 还中弹了  中了好多呢 你是不知道  吓死宝宝了  快来9我吧 等   你哦 么么哒");
    }
    @end

    Main.m:

    #import <Foundation/Foundation.h>
    #import "Soldier.h" 
    
    int main(int argc, const char * argv[]) {
        // 士兵对象
        Soldier * soldier = [Soldier new];
        soldier->_height = 2.12;
        soldier->_weight = 80;
        soldier->_name = @"美国大兵";    
    // 弹夹对象 Clip * clip = [Clip new]; clip->_bulletCount = 5; // 枪对象 Gun * gun = [Gun new]; gun->_bigClip = clip; gun->_model = @"汉阳造"; gun->_clipNum = 5; // 士兵开始干架 // 保存剩余弹夹数量 如果数量==0 则跳出循环 int remainClip = 0; while (1) { // 调用士兵开枪方法 获得剩余弹夹数 remainClip = [soldier fireWithGun:gun andClip:clip]; if (!remainClip) { break;
    } }
    return 0; }

    输出结果:

    /*
    输出结果:
        应该是循环五次后提示子弹打光了 然后求救  每次循环中发射五颗子弹    
      2015-08-27 23:18:37.182 对象做参数传递[892:34503] soldier  儿子们 孙子们 王八羔子们  都跟我一起上  冲啊  杀鸡鸡~~~
      2015-08-27 23:18:37.184 对象做参数传递[892:34503] gun  子弹 减 1
      2015-08-27 23:18:37.184 对象做参数传递[892:34503] soldier  儿子们 孙子们 王八羔子们  都跟我一起上  冲啊  杀鸡鸡~~~
      2015-08-27 23:18:37.184 对象做参数传递[892:34503] gun  子弹 减 1
      2015-08-27 23:18:37.184 对象做参数传递[892:34503] soldier  儿子们 孙子们 王八羔子们  都跟我一起上  冲啊  杀鸡鸡~~~
      2015-08-27 23:18:37.185 对象做参数传递[892:34503] gun  子弹 减 1
      2015-08-27 23:18:37.185 对象做参数传递[892:34503] soldier  儿子们 孙子们 王八羔子们  都跟我一起上  冲啊  杀鸡鸡~~~
      2015-08-27 23:18:37.185 对象做参数传递[892:34503] gun  子弹 减 1
      2015-08-27 23:18:37.185 对象做参数传递[892:34503] soldier  儿子们 孙子们 王八羔子们  都跟我一起上  冲啊  杀鸡鸡~~~
      2015-08-27 23:18:37.185 对象做参数传递[892:34503] gun  子弹 减 1
      2015-08-27 23:18:37.186 对象做参数传递[892:34503] soldier  儿子们 孙子们 王八羔子们  都跟我一起上  冲啊  杀鸡鸡~~~
      2015-08-27 23:18:37.186 对象做参数传递[892:34503] gun  友情提示: 大哥 你没子弹了  俺去给你装弹  你先拼会刺刀吧  装好了再通知你  好吗  就这么愉快的决定吧
                               ……………
                    …………….
                    …………….
                    …………….
      2015-08-27 23:18:37.217 对象做参数传递[892:34503] gun 子弹打光了
      2015-08-27 23:18:37.217 对象做参数传递[892:34503] soldier  拐洞拐  我没子弹了 还中弹了  中了好多呢 你是不知道  吓死宝宝了  快来9我吧 等你哦 么么哒
    */

     

     

     

     

     

  • 相关阅读:
    iOS9TableView分割线默认不显示,只有滑动的时候才显示 解决办法
    bug调试大全
    清理缓存
    Objective-C文件和目录操作,IOS文件操作,NSFileManager使用文件操作
    dispatch_async 与 dispatch_get_global_queue 的使用方法
    ios UISearchController
    开发报错调试总结
    返回查询结果的id返回插入数据的id值
    前端监听事件
    datetime-local设置初始值
  • 原文地址:https://www.cnblogs.com/dx-230/p/4765186.html
Copyright © 2011-2022 走看看