剧情描述:
美国大兵抗把汉阳造 拿着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我吧 等你哦 么么哒 */