OC 对象作为方法的参数和返回值传递

//

//  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;

}



你可能感兴趣的:(Object-c)