1. 程式人生 > >OC 物件作為方法的引數和返回值傳遞

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(@"%@

打了一槍,%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 = [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;

}