OC 物件作為方法的引數和返回值傳遞
//
// main.m
// 物件作為方法的引數傳遞
#import <Foundation/Foundation.h>
/*
事物名稱:士兵soldier
屬性:姓名身高體重
方法:打手槍打電話
事物名稱:手槍gun
屬性:彈夾型號
方法:上彈夾
事物名稱:彈夾clip
屬性:子彈
方法:上子彈
事物名稱:商店
屬性:
方法:賣槍賣彈夾
*/
//子彈
//新增標示和分割線
#pragma mark - 彈夾
@interface Clip : NSObject
{
@public
int _bullet;
}
-(void)addBullet;
@end
@implementation Clip
-(void)addBullet{
_bullet = 10;
}
@end
//槍
#pragma mark - 槍
@interface Gun : NSObject
{
//@public
//int _bullet;//子彈
//Clip *clip;//優化使用彈夾
}
//-(void)shoot:(NSString*)name;
-(void)shoot2:(Clip *)clip :(NSString*)name;
@end
@implementation Gun
//-(void)shoot:(NSString*)name{
// //判斷是否有子彈
// if(_bullet>0){
// _bullet--;
// NSLog(@"%@打了一槍,%i",name,_bullet);
// }else{
// NSLog(@"沒子彈了,換彈夾");
// }
//}
-(void)shoot2:(Clip *)clip :(NSString*)name{
if(clip!=nil){//nil = null = 沒有值
if(clip->_bullet>0){
clip->_bullet -=1;
NSLog(@"%@
}else{
NSLog(@"沒有子彈了,新增子彈中");
[clip addBullet];
}
}else{
NSLog(@"沒有彈夾,換彈夾");
}
}
@end
//士兵
#pragma mark - 士兵
@interface Soldier : NSObject
{
@public
NSString *_name;
double _height;
double _weight;
}
//將物件作為方法的引數
-(void)fire:(Gun *)gun :(Clip *)clip;
@end
@implementation Soldier
-(void)fire:(Gun *)gun :(Clip *)clip{
//NSLog(@"打了一槍");
[gun shoot2:clip:_name];
}
@end
#pragma mark - 商店
@interface Shop : NSObject
//物件作為返回值
-(Gun *)buyGun:(int)money;
-(Clip *)buyClip:(int)money;
@end
@implementation Shop
-(Gun *)buyGun:(int)money{
//通過new建立的物件儲存在堆中,不會自動釋放,在後面的程式碼中可以繼續使用
Gun * gun = [Gunnew];
return gun;
}
-(Clip *)buyClip:(int)money{
Clip *clip = [Clipnew];
//賣彈夾加滿子彈
[clip addBullet];
return clip;
}
@end
#pragma mark - 主函式
int main(int argc, constchar * argv[]) {
//建立商店
Shop * shop = [Shopnew];
//建立彈夾
Clip *clip = [shop buyClip:100];
//建立槍
Gun * gun = [shop buyGun:888];
//建立士兵
Soldier *soldier = [Soldiernew];
soldier->_name = @"wj";
soldier->_height = 1.7;
soldier->_weight = 85.5;
//給士兵槍並槍射擊
[soldier fire:gun :clip];
[soldier fire:gun :clip];
[soldier fire:gun :clip];
[soldier fire:gun :clip];
return 0;
}