OC基礎--對象做參數在方法間傳遞,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我吧 等你哦 麼麼噠*/