对象作为参数的连续传递

 

//
//  main.m
//  对象作为参数的连续传递

//    方法的形参,当调用该方法的时候,接收了值,才会给该方法中的形参分配存储空间,
//    如果传进来了是对象的指针,就保存了对象的地址,也就是指向了那个对象
#import <Foundation/Foundation.h>

#pragma mark - 弹夹
//弹夹
//事物名称: 弹夹(Clip)
//属性:子弹(Bullet)
//行为:上子弹(addBullet)
@interface Clip : NSObject
{
    @public
    int _bullet; // 子弹的数量
}
- (void)addBullet;
@end

@implementation Clip

- (void)addBullet{
    _bullet=10;
}

@end

#pragma  mark - 枪
////事物名称:枪(Gun)
//属性:弹夹(clip) , 型号(model)
//行为:上弹夹(addClip),射击
@interface Gun : NSObject
{
@public
    Clip *_clip;
    int _model;
}
- (void)addClip:(Clip*)mClip; // 枪可以接收一个弹夹
- (void)shoot:(Clip*)mClip; // 枪可以射击,没射击一次,弹夹的子弹数减1
@end

@implementation Gun

- (void)addClip:(Clip *)mClip{
    _clip=mClip;
}
- (void)shoot:(Clip *)mClip{
    if (mClip->_bullet>0) {
        NSLog(@"射击了一次,还剩%i个子弹",--mClip->_bullet);
    }else{
        NSLog(@"没有子弹了,该换弹夹了");
    }
}
@end

#pragma mark - 士兵
//士兵
//事物名称: 士兵(Soldier)
//属性:姓名(name), 身高(height), 体重(weight)
//行为:打枪(fire), 打电话(callPhone)
//
@interface Slodier : NSObject
{
    @public
    NSString *_name;
    int _height;
    int _weight;
}
- (void)fire:(Gun*)mGun and:(Clip*)mClip;
- (void)changeClip:(Gun*)mGun and:(Clip *)mClip;
- (void)call;
@end

@implementation Slodier

- (void)fire:(Gun *)mGun and:(Clip *)mClip{
    [mGun shoot:mClip];
}

- (void)changeClip:(Gun*)mGun and:(Clip *)mClip{
    [mGun addClip:mClip];
}

-(void)call{
    NSLog(@"士兵打电话了");
}

@end


int main(int argc, const char * argv[]) {
    // 给士兵一个枪,拿到一个弹夹,调用枪的上弹夹的功能,然后射击
    //创建一个弹夹
    Clip *pc=[Clip new];
//    初始化弹夹对象
    pc->_bullet=5;
    //创建一个枪对象
    Gun *pg=[Gun new];
//    初始化枪对象
    pg->_clip=pc;
    pg->_model=47;
//    创建一个士兵对象
    Slodier *ps=[Slodier new];
//    初始化士兵对象
    ps->_name=@"大兵瑞恩";
    ps->_height=190;
    ps->_weight=100;
    
    [ps fire:pg and:pc];
    [ps fire:pg and:pc];
    [ps fire:pg and:pc];
    [ps fire:pg and:pc];
    [ps fire:pg and:pc];
    [ps fire:pg and:pc];

//    创建一个新的弹夹
    Clip *newPc = [Clip new];
//    初始化这个新的弹夹
    newPc->_bullet=5;
//    士兵会换弹夹,会调用枪的换弹夹功能换
    [ps changeClip:pg and:newPc];
//    继续射击
    NSLog(@"更换弹夹之后,继续射击");
    [ps fire:pg and:newPc];
    
    return 0;
}

 

posted @ 2016-06-16 10:52  Shaper22  阅读(129)  评论(0编辑  收藏  举报