OC语法基础(2)

创建多个对象

1.找对象 (抽象对象)

有哪些对象是必要的

士兵:

类名:Soldier

属性:life name level

功能:跑 跳 打手枪 开坦克 蹲下 瞄准 换枪 换子弹

枪:

属性:型号,颜色,子弹

功能:

打子弹

Tank:

2.设计类

类名:

属性:

功能:

3.代码实现

// 用面向对象模拟士兵开枪场景:注意体会多个对象之间的组合关系、对象作为函数参数传递、对象的连续传递

#import

 

#pragma mark - 子弹类

@interface Bullet : NSObject

{

    @public

    float _size;// 大小

    int _count;// 数量

}

@end

 

@implementation Bullet

 

@end

 

#pragma mark - 枪

@interface Gun : NSObject

{

    @public

    int _bulletCOunt;// 子弹个数

    NSString *_model;// 枪的型号

}

 

// 射击方法

- (void)shoot;

- (void)shootWithBullet:(Bullet *)bullet;

@end

 

@implementation Gun

 

// 如果项目变动过大,不建议修改以前的代码,而是新增方法

- (void)shoot

{

//    NSLog(@"打枪了....");

   

    if (_bulletCOunt > 0) {// 2

        _bulletCOunt -= 1;// 每开一枪让子弹减一

    }else

    {

        _bulletCOunt = 0;

//        NSLog(@"请上子弹");

    }

    NSLog(@"剩余子弹 = %d", _bulletCOunt);//2 1

}

 

- (void)shootWithBullet:(Bullet *)bullet

{

//    1.取出子弹的个数

    int num = bullet->_count;

    if (num > 0) {

        num -= 1;// 每开一枪让子弹减一

    }else

    {

        num = 0;

    }

    bullet->_count = num;//把减完后的值赋值回去

    NSLog(@"剩余子弹 = %d", bullet->_count);

}

@end

 

 

typedef enum

{

    kSoldierLevel1,// 大兵

    kSoldierLevel2,// 列兵

    kSoldierLevel3// 士官

}SoldierLevel;

 

#pragma mark - 士兵类

@interface Soldier : NSObject

{

    @public

    int _life;// 生命值

    NSString *_name;// 名称

    SoldierLevel _level;// 等级

}

 

- (void)fireByGun:(Gun *)gun;

 

- (void)fireByGun:(Gun *)gun andBullet: (Bullet *)bullet;

@end

 

@implementation Soldier

 

- (void)fireByGun:(Gun *)gun

{

//    利用枪调用枪的开枪方法

//     在OC当中利用nil去调用方法是不会报错的

    [gun shoot];

}

 

- (void)fireByGun:(Gun *)gun andBullet:(Bullet *)bullet

{

    [gun shootWithBullet:bullet];

}

@end

#pragma mark - 主函数

int main(int argc, const char * argv[])

{

    Soldier *s1 = [Soldier new];

    s1->_life = 10;

    s1->_name = @"屎太浓";

    s1->_level = kSoldierLevel3;

   

//    创建枪

    Gun *gun = [Gun new];

//    创建子弹

    Bullet *bullet = [Bullet new];

    bullet->_count = 3;//设置子弹个数

   

   

    [s1 fireByGun:gun andBullet:bullet];

   

   

   

   

   

   

    return 0;

}

 

void test()

{

    Soldier *s1 = [Soldier new];

    s1->_life = 10;

    s1->_name = @"屎太浓";

    s1->_level = kSoldierLevel3;

   

    Soldier *s2 = [Soldier new];

    s2->_life = 5;

    s2->_name = @"屎瓦辛味";

    s2->_level = kSoldierLevel2;

   

    Soldier *s3 = s2;

    //    NSLog(@"life = %d", s3->_life);

   

    s3->_life = 8;

    //    NSLog(@"life = %d", s2->_life);

   

    Soldier *s4 = s3;

    s4->_name = @"张万明";

    NSLog(@"%@", s2->_name);

   

   

}

多文件实现

//  Bullet.h

#import

 

@interface Bullet : NSObject

{

@public

    float _size;// 大小

    int _count;// 数量

}

@end

//  Bullet.m

#import "Bullet.h"

 

@implementation Bullet

 

@end

 

//  Iphone.h

#import

 

@interface Iphone : NSObject

- (void)sendSignal:(NSString *)number;

@end

//  Iphone.m

#import "Iphone.h"

 

@implementation Iphone

 

- (void)sendSignal:(NSString *)number

{

    NSLog(@"number = %@", number);

}

@end

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


//  Soldier.h

#import

#import "Gun.h"

#import "Iphone.h"

 

typedef enum

{

    kSoldierLevel1,// 大兵

    kSoldierLevel2,// 列兵

    kSoldierLevel3// 士官

}SoldierLevel;

 

@interface Soldier : NSObject

{

@public

    int _life;// 生命值

    NSString *_name;// 名称

    SoldierLevel _level;// 等级

}

- (void)fireByGun:(Gun *)gun;

- (void)fireByGun:(Gun *)gun andBullet: (Bullet *)bullet;

 

- (void)call:(Iphone *)phone;

@end

//  Soldier.m

#import "Soldier.h"

// contrl + command + ↑

@implementation Soldier

- (void)fireByGun:(Gun *)gun

{

    //    利用枪调用枪的开枪方法

    //     在OC当中利用nil去调用方法是不会报错的

    [gun shoot];

}

 

- (void)fireByGun:(Gun *)gun andBullet:(Bullet *)bullet

{

    [gun shootWithBullet:bullet];

}

 

- (void)call:(Iphone *)phone

{

    [phone sendSignal:@"12580"];

}

@end

//  Gun.h

#import

#import "Bullet.h"//.h

 

@interface Gun : NSObject

{

@public

    int _bulletCOunt;// 子弹个数

    NSString *_model;// 枪的型号

}

 

// 射击方法

- (void)shoot;

- (void)shootWithBullet:(Bullet *)bullet;

 

@end

//  Gun.m

#import "Gun.h"

 

@implementation Gun

// 如果项目变动过大,不建议修改以前的代码,而是新增方法

- (void)shoot

{

    //    NSLog(@"打枪了....");

   

    if (_bulletCOunt > 0) {// 2

        _bulletCOunt -= 1;// 每开一枪让子弹减一

    }else

    {

        _bulletCOunt = 0;

        //        NSLog(@"请上子弹");

    }

    NSLog(@"剩余子弹 = %d", _bulletCOunt);//2 1

}

 

- (void)shootWithBullet:(Bullet *)bullet

{

    //    1.取出子弹的个数

    int num = bullet->_count;

    if (num > 0) {

        num -= 1;// 每开一枪让子弹减一

    }else

    {

        num = 0;

    }

    bullet->_count = num;//把减完后的值赋值回去

    NSLog(@"剩余子弹 = %d", bullet->_count);

}

 

@end

//  main.m

#import

#import "Soldier.h"

 

int main(int argc, const char * argv[])

{

 

    Soldier *s1 = [Soldier new];

    s1->_name = @"生生";

    s1->_life = 8;

    s1->_level = kSoldierLevel3;

   

//    创建枪

    Gun *g1 = [Gun new];

//    创建子弹

    Bullet *b1 = [Bullet new];

    b1->_count = 3;

    // 330  740

    [s1 fireByGun:g1 andBullet:b1];

   

    Iphone *phone = [Iphone new];

   

    [s1 call:phone];

   

    return 0;

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值