//
// main.m
// 对象作为方法的参数传递
#import
/*
事物名称:士兵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(@"%@打了一枪,%i",name,clip->_bullet);
}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 = [Gun new];
return gun;
}
-(Clip *)buyClip:(int)money{
Clip *clip = [Clip new];
//卖弹夹加满子弹
[clip addBullet];
return clip;
}
@end
#pragma mark - 主函数
int main(int argc, const char * argv[]) {
//创建商店
Shop * shop = [Shop new];
//创建弹夹
Clip *clip = [shop buyClip:100];
//创建枪
Gun * gun = [shop buyGun:888];
//创建士兵
Soldier *soldier = [Soldier new];
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;
}