黑马程序员——ObjectiveC基础——对象作为方法的参数连续传递

来源:互联网 发布:php后端开发面试 编辑:程序博客网 时间:2024/05/09 03:13

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

一、对象和方法的关系
1.对象可以作为方法的参数
小明用iPad 迷你看电影
代码实现:

#import <Foundation/Foundation.h>@interface Ipad : NSObject{    @public    NSString *_typeNum;}@end@implementation Ipad@end@interface Person : NSObject{    @public    NSString *_name;}-(void)seeMovie:(Ipad *) ipad;@end@implementation Person-(void)seeMovie:(Ipad *)ipad{    NSLog(@"%@用%@看电影",_name,ipad->_typeNum);}@endint main(int argc, const char * argv[]) {    @autoreleasepool {        Ipad *i = [Ipad new];        Person *p = [Person new];        i->_typeNum = @"Ipad Mini";        p->_name = @"小明";        [p seeMovie:i]; //小明用Ipad Mini看电影    }    return 0;}

2.对象可以作为方法的返回值
母鸡下蛋
代码实现:

#import <Foundation/Foundation.h>@interface Egg : NSObject{    @public    float _weight;}@end@implementation Egg@end@interface Hen : NSObject{    @public    NSString *_name;}-(Egg *)lay:(float)weight;@end@implementation Hen-(Egg *)lay:(float)weight{    Egg *e = [Egg new];    e->_weight = weight;    return e;}@endint main(int argc, const char * argv[]) {    @autoreleasepool {        Hen *hen = [Hen new];        hen->_name = @"Tim";        Egg *egg = [hen lay:20.50f];        NSLog(@"母鸡%@下了一个%.2fg的蛋",hen->_name,egg->_weight);        //母鸡Tim下了一个20.50g的蛋    }    return 0;}

二、对象最为方法的参数连续传递
具体问题:士兵用枪射击。
士兵类:
属性:年龄、姓名
方法:开枪
枪类:
属性:型号
方法:射击
弹夹类:
属性:子弹口径,子弹数量

代码:

#import <Foundation/Foundation.h>#pragma mark 弹夹类@interface BulletBox:NSObject{    @public    NSString *_size;    int _bulletCount;}@end@implementation BulletBox@end#pragma mark 枪类@interface Gun:NSObject{    @public    NSString *_size;}-(void) shoot:(BulletBox *)bulletbox;@end@implementation Gun-(void) shoot:(BulletBox *)bulletbox{    if(bulletbox->_bulletCount>0){        bulletbox->_bulletCount--;        NSLog(@"\n开枪射击,嘭...(枪的型号:%@,子弹口径:%@,剩余子弹:%d)",_size,bulletbox->_size,bulletbox->_bulletCount);    }else{        NSLog(@"\n没有子弹了,请更换弹夹!!");    }}@end#pragma mark 士兵类@interface Soldier:NSObject{    @public    NSString *_name;    int _life;}-(void) fire:(Gun *)gun and:(BulletBox *)bulletbox;@end@implementation Soldier-(void) fire:(Gun *)gun and:(BulletBox *)bulletbox{    [gun shoot:bulletbox];}@end#pragma mark -int main(int argc, const char * argv[]) {    @autoreleasepool {        //实例化弹夹        BulletBox *bulletbox = [BulletBox new];        bulletbox->_size = @"0.5mm";        bulletbox->_bulletCount = 5;        //实例化枪        Gun *gun = [Gun new];        gun->_size = @"AK47";        //实例化士兵        Soldier *soldier = [Soldier new];        soldier->_name = @"卫龙";        soldier->_life = 100;        //连开7枪        [soldier fire:gun and:bulletbox];        [soldier fire:gun and:bulletbox];        [soldier fire:gun and:bulletbox];        [soldier fire:gun and:bulletbox];        [soldier fire:gun and:bulletbox];        [soldier fire:gun and:bulletbox];        [soldier fire:gun and:bulletbox];    }    return 0;}

运行结果:
开枪射击,嘭…(枪的型号:AK47,子弹口径:0.5mm,剩余子弹:4)
开枪射击,嘭…(枪的型号:AK47,子弹口径:0.5mm,剩余子弹:3)
开枪射击,嘭…(枪的型号:AK47,子弹口径:0.5mm,剩余子弹:2)
开枪射击,嘭…(枪的型号:AK47,子弹口径:0.5mm,剩余子弹:1)
开枪射击,嘭…(枪的型号:AK47,子弹口径:0.5mm,剩余子弹:0)
没有子弹了,请更换弹夹!!
没有子弹了,请更换弹夹!!

分析:弹夹类作为参数首先通过枪类的shot方法传入,然后再通过士兵类的fire方法传入士兵类。弹夹类对象作为函数的参数实现了连续传递。

0 0
原创粉丝点击