• 第三讲.继承,完整初始化方法,遍历构造器,多态(代码) 另附植物大战僵尸练习



    //初始化和遍历构造器使用

    //person.h文件
    1
    #import <Foundation/Foundation.h> 2 3 @interface Person : NSObject 4 5 { 6 7 NSString *_name; 8 int _age; 9 NSString *_sex; 10 11 12 } 13 14 +(id)PersonWithName:(NSString*)name age:(int)age; 15 -(id)initWithName:(NSString*)name age:(int)age; 16 17 -(void)setName:(NSString*)name; 18 -(NSString*)name; 19 20 -(void)setAge:(int)age; 21 -(int)age; 22 23 -(void)setSex:(NSString*)sex; 24 -(NSString *)sex; 25 26 27 +(id)PersonWithName:(NSString *)name; 28 -(id)initWithName:(NSString*)name; 29 30 @end

     //person.m文件
    1
    #import "Person.h" 2 3 @implementation Person 4 5 +(id)PersonWithName:(NSString*)name age:(int)age 6 { 7 Person *p = [[Person alloc] initWithName:(NSString*)name age:age]; 8 return p; 9 10 } 11 //完整的初始化方法 12 13 -(id)initWithName:(NSString*)name age:(int)age 14 { 15 self = [super init]; 16 if (self) { 17 _name = name; 18 _age = age; 19 } 20 21 return self; 22 23 } 24 25 +(id)PersonWithName:(NSString *)name 26 { 27 28 Person *p2 = [[Person alloc] initWithName:name]; 29 return p2; 30 31 32 } 33 34 35 -(id)initWithName:(NSString*)name 36 { 37 self = [super init]; 38 if (self) { 39 _name = name; 40 } 41 42 43 return self; 44 45 46 } 47 48 49 50 51 52 -(void)setName:(NSString*)name 53 { 54 55 _name = name; 56 57 } 58 -(NSString*)name 59 { 60 61 return _name; 62 } 63 64 -(void)setAge:(int)age 65 { 66 _age = age; 67 68 69 } 70 -(int)age 71 { 72 73 return _age; 74 } 75 76 -(void)setSex:(NSString*)sex 77 { 78 79 _sex = sex; 80 81 } 82 -(NSString *)sex 83 { 84 return _sex; 85 86 87 } 88 89 90 91 @end

      //main.m文件
    1
    #import <Foundation/Foundation.h> 2 3 #import "Person.h" 4 5 int main(int argc, const char * argv[]) { 6 @autoreleasepool { 7 8 //注意在使用遍历构造器时,要和初始化方法结合到一起才能使用 9 //类方法只有类才可以调用 10 Person *p1 = [Person PersonWithName:@"小明" age:12]; 11 NSLog(@"%@ %d",[p1 name],[p1 age]); 12 13 //注意在使用遍历构造器时,要和初始化方法结合到一起才能使用 14 Person *p2 = [Person PersonWithName:@"小辉"]; 15 NSLog(@"%@ ",[p2 name]); 16 17 18 19 20 21 } 22 return 0; 23 }
    
    
    
     
    
    
    
     

    oc中植物大战僵尸练习(用继承的方法写)

    Zombie.h(普通僵尸)

     1 #import <Foundation/Foundation.h>
     2 
     3 @interface Zombie : NSObject
     4 
     5 {
     6     NSString *_type;   //僵尸种类
     7     NSInteger _blood;  //总血量
     8     NSInteger _restBlood; //剩余血量
     9     NSInteger _lostBlood;  //失血量
    10     BOOL _isDeath;  //是否死亡
    11     
    12     
    13     
    14 }
    15 
    16 
    17 //初始化方法(总血量)
    18 -(id)initWithType:(NSString*)type
    19             blood:(NSInteger)blood
    20         restBlood:(NSInteger)restBlood
    21         lostBlood:(NSInteger)lostBlood
    22           isDeath:(BOOL)isDeath;
    23 
    24 //遍历构造器
    25 +(id)zombleWithType:(NSString*)type
    26                     blood:(NSInteger)blood
    27                 lostBlood:(NSInteger)loatBlood;
    28 
    29 
    30 
    31 //赋值
    32 -(void)setIsdeath:(BOOL)isDeath;
    33 
    34 //取值
    35 -(NSString*)type;
    36 -(NSInteger)blood;
    37 -(NSInteger)lostBlood;
    38 -(BOOL)isDeath;
    39 
    40 //被打失血
    41 -(void)attack;
    42 
    43 //死亡
    44 -(void)dead;
    45 
    46 
    47 
    48 
    49 @end

    //Zombie.m(普通僵尸)
    1
    #import "Zombie.h" 2 3 @implementation Zombie 4 //初始化 5 -(id)initWithType:(NSString*)type 6 blood:(NSInteger)blood 7 restBlood:(NSInteger)restBlood 8 lostBlood:(NSInteger)lostBlood 9 isDeath:(BOOL)isDeath 10 { 11 12 if(self = [super init]) 13 { 14 _type = type; 15 _blood = blood; 16 _restBlood = restBlood; 17 _lostBlood = lostBlood; 18 _isDeath = isDeath; 19 20 } 21 return self; 22 23 } 24 25 //遍历构造器 26 +(id)zombleWithType:(NSString*)type 27 blood:(NSInteger)blood 28 lostBlood:(NSInteger)lostBlood 29 { 30 31 return [[Zombie alloc] initWithType:type blood:blood restBlood:blood lostBlood:lostBlood isDeath:NO]; 32 33 } 34 35 36 -(void)setIsdeath:(BOOL)isDeath 37 { 38 39 _isDeath = isDeath; 40 } 41 42 43 //取值 44 -(NSString*)type 45 { 46 return _type; 47 48 } 49 -(NSInteger)blood 50 { 51 return _blood; 52 53 } 54 -(NSInteger)lostBlood 55 { 56 57 return _lostBlood; 58 } 59 -(BOOL)isDeath 60 { 61 return _isDeath; 62 63 } 64 65 66 67 68 //被打击失血 69 -(void)attack 70 { 71 if(_restBlood <=_lostBlood){ 72 _isDeath = YES; 73 [self dead]; 74 75 } else { 76 NSLog(@"普通僵尸每次失去血量:%ld",_lostBlood); 77 _restBlood -= _lostBlood; 78 NSLog(@"普通僵尸剩余血量:%ld",_restBlood); 79 80 } 81 } 82 83 //死亡 84 -(void)dead 85 { 86 NSLog(@"....普通僵尸已死亡!!!"); 87 88 } 89 90 91 92 @end

    ArmorZombie.文件(路障僵尸)

     1 #import <Foundation/Foundation.h>
     2 
     3 #import "Zombie.h"
     4 
     5 @interface ArmorZombie : Zombie
     6 
     7 {
     8     
     9     NSString* _armorType; //防具类型
    10     BOOL _isArmorDrop;  //防具是否掉落
    11     
    12     
    13 }
    14 
    15 //初始化
    16 -(id)initWithType:(NSString*)type
    17             blood:(NSInteger)blood
    18         lostBlood:(NSInteger)lostBlood
    19           isDeath:(BOOL)isDeath
    20         armorType:(NSString*)armorType;
    21 
    22 
    23 //遍历构造器
    24 +(id)armorZombieType:(NSString*)type
    25                     blood:(NSInteger)blood
    26                 lostBlood:(NSInteger)lostBlood
    27                 armorType:(NSString*)armorType;
    28 
    29 
    30 //赋值
    31 -(void)setlostBlood:(NSInteger)lostBlood;
    32 
    33 //取值
    34 -(NSString*)type;
    35 -(NSInteger)blood;
    36 -(NSInteger)lostBlood;
    37 -(NSString*)armorType;
    38 -(BOOL)isArmorDrop;
    39 
    40 //被打失血
    41 -(void)attack;
    42 
    43 //防具被打烂
    44 -(void)armorBreak;
    45 
    46 //死亡
    47 -(void)dead;
    48 
    49 
    50 @end

    ArmorZombie.m 文件(路障僵尸)

      1 #import "ArmorZombie.h"
      2 
      3 @implementation ArmorZombie
      4 //初始化
      5 -(id)initWithType:(NSString*)type
      6             blood:(NSInteger)blood
      7         lostBlood:(NSInteger)lostBlood
      8           isDeath:(BOOL)isDeath
      9         armorType:(NSString*)armorType
     10 {
     11     self = [super initWithType:type blood:blood restBlood:blood lostBlood:lostBlood isDeath:NO];
     12     
     13     if(self){
     14         
     15         _armorType = armorType;
     16         _isArmorDrop = NO;
     17         
     18     }
     19     return self;
     20     
     21 }
     22 
     23 
     24 //遍历构造器
     25 +(id)armorZombieType:(NSString*)type
     26                        blood:(NSInteger)blood
     27                    lostBlood:(NSInteger)lostBlood
     28                    armorType:(NSString*)armorType;
     29 {
     30     return [[ArmorZombie alloc]initWithType:type blood:blood restBlood:blood lostBlood:lostBlood isDeath:NO];
     31     
     32     
     33     
     34 }
     35 
     36 
     37 //赋值
     38 -(void)setlostBlood:(NSInteger)lostBlood
     39 {
     40     _lostBlood = lostBlood;
     41 
     42 }
     43 
     44 //取值
     45 -(NSString*)type
     46 {
     47     return _type;
     48 }
     49 -(NSInteger)blood
     50 {
     51     return  _blood;
     52 
     53 }
     54 -(NSInteger)lostBlood
     55 {
     56     return _lostBlood;
     57 
     58 }
     59 -(NSString*)armorType
     60 {
     61     return _armorType;
     62 
     63 }
     64 -(BOOL)isArmorDrop
     65 {
     66  return _isArmorDrop;
     67 
     68 }
     69 
     70 //被打失血
     71 -(void)attack
     72 {
     73     static int flag = 1;
     74     if (_restBlood <= _blood/2&&1==flag) {
     75         _isArmorDrop = YES;
     76         [self armorBreak];
     77         [self setlostBlood:3];
     78         flag = 0;
     79     }
     80     if (_restBlood <= _lostBlood) {
     81          _isDeath = YES;
     82           [self dead];
     83     }else {
     84         NSLog(@"路障僵尸每次失血量:%ld",_lostBlood);
     85         _restBlood -= _lostBlood;
     86         NSLog(@"路障僵尸剩余血量:%ld",_restBlood);
     87     
     88     }
     89 }
     90 
     91 //防具被打烂
     92 -(void)armorBreak
     93 {
     94     NSLog(@"路障掉落.....");
     95     
     96 }
     97 
     98 //死亡
     99 -(void)dead
    100 {
    101     NSLog(@".....路障僵尸已死亡!!!");
    102 
    103 
    104 }
    105 
    106 
    107 
    108 
    109 
    110 
    111 
    112 @end

    IronZombie.h文件(路障僵尸)

     1 #import <Foundation/Foundation.h>
     2 
     3 
     4 #import "ArmorZombie.h"
     5 
     6 @interface IronZombie : ArmorZombie
     7 
     8 {
     9     
    10     NSString*_weakness; //弱点
    11     
    12     
    13     
    14     
    15 }
    16 
    17 //初始化
    18 -(id)initWithType:(NSString*)type
    19             blood:(NSInteger)blood
    20         lostBlood:(NSInteger)lostBlood
    21           isDeath:(BOOL)isDeath
    22         armorType:(NSString*)armorType
    23          weakness:(NSString*)weakness;
    24 
    25 
    26 //遍历构造器
    27 +(id)ironZombieType:(NSString*)type
    28                blood:(NSInteger)blood
    29            lostBlood:(NSInteger)lostBlood
    30            armorType:(NSString*)armorType
    31            weakness:(NSString*)weakness;
    32 
    33 
    34 
    35 
    36 //取值
    37 -(NSString*)type;
    38 -(NSInteger)blood;
    39 -(NSInteger)lostBlood;
    40 -(NSString*)armorType;
    41 -(NSString*)weakness;
    42 
    43 //被打失血
    44 -(void)attack;
    45 
    46 //防具被打烂
    47 -(void)armorBreak;
    48 
    49 //防具被磁铁吸走
    50 -(void)absorb;
    51 
    52 //死亡
    53 -(void)dead;
    54 
    55 @end

    IronZombie.m文件(路障僵尸)

     1 #import <Foundation/Foundation.h>
     2 
     3 
     4 #import "ArmorZombie.h"
     5 
     6 @interface IronZombie : ArmorZombie
     7 
     8 {
     9     
    10     NSString*_weakness; //弱点
    11     
    12     
    13     
    14     
    15 }
    16 
    17 //初始化
    18 -(id)initWithType:(NSString*)type
    19             blood:(NSInteger)blood
    20         lostBlood:(NSInteger)lostBlood
    21           isDeath:(BOOL)isDeath
    22         armorType:(NSString*)armorType
    23          weakness:(NSString*)weakness;
    24 
    25 
    26 //遍历构造器
    27 +(id)ironZombieType:(NSString*)type
    28                blood:(NSInteger)blood
    29            lostBlood:(NSInteger)lostBlood
    30            armorType:(NSString*)armorType
    31            weakness:(NSString*)weakness;
    32 
    33 
    34 
    35 
    36 //取值
    37 -(NSString*)type;
    38 -(NSInteger)blood;
    39 -(NSInteger)lostBlood;
    40 -(NSString*)armorType;
    41 -(NSString*)weakness;
    42 
    43 //被打失血
    44 -(void)attack;
    45 
    46 //防具被打烂
    47 -(void)armorBreak;
    48 
    49 //防具被磁铁吸走
    50 -(void)absorb;
    51 
    52 //死亡
    53 -(void)dead;
    54 
    55 
    56 
    57 @end

    main.m文件(调用)

     1 #import <Foundation/Foundation.h>
     2 
     3 #import "Zombie.h"
     4 
     5 #import "ArmorZombie.h"
     6 
     7 #import "IronZombie.h"
     8 
     9 
    10 int main(int argc, const char * argv[]) {
    11     @autoreleasepool {
    12         
    13       Zombie *ptjs = [Zombie zombleWithType:@"普通僵尸" blood:50 lostBlood:3];
    14         int i=0;
    15         while (![ptjs isDeath])
    16         {
    17             if(![ptjs isDeath])
    18             {
    19                 [ptjs attack]; //攻击普通僵尸
    20             }
    21             i++;
    22             
    23         }
    24         
    25         NSLog(@"--------------------------------");
    26         
    27         
    28         ArmorZombie *lzjs = [ArmorZombie armorZombieType:@"防具僵尸" blood:80 lostBlood:2 armorType:@"路障防具"];
    29          i=0;
    30         while (![lzjs isDeath])
    31         {
    32             if(![lzjs isDeath])
    33             {
    34                 [lzjs attack]; //攻击普通僵尸
    35             }
    36             i++;
    37 
    38         }
    39         
    40         NSLog(@"--------------------------------");
    41 
    42         
    43 
    44     IronZombie *ttjs = [IronZombie  ironZombieType:@"铁桶僵尸"  blood:120  lostBlood:1 armorType:@"铁桶防具" weakness:@"铁桶被吸走"];
    45          i=0;
    46         while (![ttjs isDeath])
    47         {
    48             if(![ttjs isDeath])
    49             {
    50                 [ttjs attack]; //攻击普通僵尸
    51             }
    52             i++;
    53             
    54         }
    55      
    56     }
    57     return 0;
    58 }
  • 相关阅读:
    LAMP安装配置过程
    【校招面试 之 C/C++】第31题 C++ 11新特性(二)之nullptr关键字
    【校招面试 之 C/C++】第30题 C++ 11新特性(一)之auto关键字
    【校招面试 之 C/C++】第29题 C/C++ 关键字extern
    【校招面试 之 剑指offer】第18题 删除链表中的节点
    【校招面试 之 剑指offer】第17题 打印从1到最大的n位数
    【校招面试 之 剑指offer】第16题 数值的整数次方
    【校招面试 之 剑指offer】第11题 旋转数组中的最小数字
    【Linux 进程】之关于父子进程之间的数据共享分析
    【校招面试 之 剑指offer】第10-3题 矩阵覆盖问题
  • 原文地址:https://www.cnblogs.com/erdeng/p/4769045.html
Copyright © 2020-2023  润新知