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我吧 等你哦 么么哒
    */

     

     

     

     

     

  • 相关阅读:
    LeetCode Best Time to Buy and Sell Stock
    LeetCode Scramble String
    LeetCode Search in Rotated Sorted Array II
    LeetCode Gas Station
    LeetCode Insertion Sort List
    LeetCode Maximal Rectangle
    Oracle procedure
    浏览器下载代码
    Shell check IP
    KVM- 存储池配置
  • 原文地址:https://www.cnblogs.com/dx-230/p/4765186.html
Copyright © 2011-2022 走看看