OC前三讲小结及打僵尸的继承练习

OC第一讲面向对象

这讲主要:

(1)了解对象和类的区别与联系

(2)面向对象的三大特点:封装,继承,多态

 (3)学会对象的创建和使用

(4)熟练掌握继承,初始化方法,指定初始化方法,便利构造器的用法

1.面想对象编程oop   面向过程的编程  opp

   面向过程编程:分析解决问题的步骤,实现函数,依次调用
面向对象编程:分解问题组成的对象,协调对象间的联系和通信, 解决问题。
对象定义了解决问题的步骤中的⾏行为,不刻意完成⼀一个步骤。以过程为中心,以对象为中心
2.面向对象永远离不开面型过程
  面向对象设计具有良好的可扩展性,可重用性
类是具有相同特征和行为的事物的抽象
对象是类的实例的实例
类是对象的类型
万事万物皆对象
3.
⾯面向对象编程中使⽤用对象完成程序
开发中 : 先定义类 , 再创建对象 , 然后使⽤用对象。
定义类包含两部分 : 接⼝口部分和实现部分。分开写。  
1.   接⼝口部分 : 对外声明类的特征和⾏行为。
2.   实现部分 : 对内实现⾏行为。

接⼝口部分标志 : @interface ... @end   作⽤用 : 声明类的实例变量和⽅方法 , 即特征和⾏行为。
包含内容 : 类名、⽗父类名、实例变量、⽅方法
   
%@表示所有类的对象
3.
1)
分配内存空间 :Person * p = [Person alloc];  初始化 : p  = [p init];  通常这两部操作需要连写 Person  * p = [[Person alloc] init];

2)
+ ( id )alloc; + 表⽰示这个⽅方法属于类 , 只能类执⾏行。 id 返回值   类型 , 表⽰示任意类型的对象 , 即创建好的对象。
- ( id )init; - 表⽰示这个⽅方法属于对象 , 只能对象执⾏行。 id 返回值   类型 , 表⽰示初始化完成的对象。


//初始化
-(id)init
{
    _type = @"奥迪S8";
    _price = 20000000;
    return self;

}




OC第二讲

1.public(公有的)  实例对象可以在类的外部和内部操作 
   protected(受保护的,默认的)实例对象只能在该类和其子类内操作
  private(私有的)实例对象只能在该类内访问
2.OC中的⽅方法分两种:类⽅方法和实例⽅方法。
类⽅方法:只能类使⽤用,例如:+(id)alloc :类⽅方法中不能使⽤用 实例变量 实例⽅方法:只能对象使⽤用,例如: -(void)sayHi
3.OC中使⽤用消息发送机制:[receiver message]
[person sayHi];
正确表述:student对象发送sayHi消息。 1)student接收到消息,即⽅方法sayHi; 2)student找到sayHi⽅方法,并执⾏。
4.-(id)init 这个初始化⽅方法只能给实例变量设置默认值,不灵活。
-(id)initWithName: ⾃自定义初始化⽅方法,根据需求定义初始化⽅方 法。
5.self   代表本类对象
6.告诉编译器@class后的字符串作为类名使⽤用,并未导⼊入类的接⼝内容。要在.m文件中用importe导入
有效避免嵌套循环导⼊。
7.方法是OC的核⼼心,采⽤用消息机制:[receiver message] “-”message由对象来调⽤用;“+”message由类来调⽤用。




OC第三讲

1.继承的上层:父类,继承的下层:子类。继承是单向的,继承具有传递性:A继承与B,B继承与C,A具有B和C的特征和行为。
   子类能够继承父类所有的全部的特征和行为。
2.oc,中只允许但继承。
2.super是编译器指令,并⾮对象。
作⽤:super发消息,可以执⾏父类中实现的方法。 实际上是在请求OC向该类的超类发送消息。如果超类中没有定义该消息将在继承链中继续查找相对应的方法。子类可以重写父类的⽅方法,:子类既有自己的实现,又有父类 继承下来的实现,如果想使用父类的实现,super发送消息。
3.学习继承之前,初始化⽅法,没有self = [super init]字样。我们为 实例变量逐一赋值。
学习继承之后,父类中声明了公共的实例变量。作为父类,也应该 有自己的初始化⽅方法,为这些公共实例变量赋初值。子类定义了除父类中公共实例变量之外的实例变量。在⾃自⾝身的初始 化方法中,优先向super发送init消息,初始化公共变量,初始化成 功之后,再初始化⾃身特有变量,从而完成全部实例变量的初始化。
4.初始化方法是“-”方法,id或者instancetype类型的返回值,以init开头,可以带0到多个参数,
  内部实现:先执行super的初始化方法,在初始化自身变量,return   self.


OC继承:打僵尸

#import <Foundation/Foundation.h>


@interface Jiangshi :NSObject

{

   NSString *_type;

   NSInteger _totleBloodValue;//总血量

   NSInteger _reduceBloodValue;//被攻击时减少的血量

   int _lastBloodValue;//剩余血量

   bool _isDeath;//判断死亡状态

}


-(id)initWithNameType:(NSString *)type

     totileBloodValue:(NSInteger)totileBloodValue

     reduceBloodValue:(NSInteger)reduceBloodValue;


+(id)jiangshiWithType:(NSString *)type

     totileBloodValue:(NSInteger)totileBloodValue

     reduceBloodValue:(NSInteger)reduceBloodValue;

-(void)setType:(NSString *)type;

-(void)setTotleBloodValue:(NSInteger)totleBloodValue;

-(void)setReduceBloodValue:(NSInteger)reduceBloodValue;

-(NSString *)type;

-(NSInteger)totleBloodValue;

-(NSInteger)reduceBloodValue;

- (BOOL)isDeath;

- (void)death;

- (int)byAttackReduceBloodValue;


@end


#import "Jiangshi.h"


@implementation Jiangshi

-(id)initWithNameType:(NSString *)type

     totileBloodValue:(NSInteger)totileBloodValue

     reduceBloodValue:(NSInteger)reduceBloodValue

{

   self = [superinit];

   if (self) {

       _type = type;

       _totleBloodValue = totileBloodValue;

       _reduceBloodValue = reduceBloodValue;

    }

    return self;

}


+(id)jiangshiWithType:(NSString *)type

     totileBloodValue:(NSInteger)totileBloodValue

     reduceBloodValue:(NSInteger)reduceBloodValue

{

    Jiangshi *i = [[Jiangshialloc]

                  initWithNameType:type totileBloodValue:totileBloodValue reduceBloodValue:reduceBloodValue];

   return i;

}


-(void)setType:(NSString *)type

{

   _type = type;

}

-(void)setTotleBloodValue:(NSInteger)totleBloodValue

{

   _totleBloodValue = totleBloodValue;

}

-(void)setReduceBloodValue:(NSInteger)reduceBloodValue

{

   _reduceBloodValue = reduceBloodValue;

}


-(NSString *)type

{

   return _type;

}

-(NSInteger)totleBloodValue

{

    return_totleBloodValue;

}

-(NSInteger)reduceBloodValue

{

    return_reduceBloodValue;

}


- (BOOL)isDeath

{

      return_lastBloodValue<=0;

}

- (void)death

{

    NSLog(@"已死");

}

- (int)byAttackReduceBloodValue

{

    _lastBloodValue -=_reduceBloodValue;

    return_lastBloodValue;

}

@end


#import "Jiangshi.h"


@interface Daojujiangshi :Jiangshi

{

   NSString *_daoju;

}

-(id)initWithNameType:(NSString *)type

     totileBloodValue:(NSInteger)totileBloodValue

     reduceBloodValue:(NSInteger)reduceBloodValue

                daoju:(NSString *)daoju;

+(id)daojujiangshiWithType:(NSString *)type

     totileBloodValue:(NSInteger)totileBloodValue

     reduceBloodValue:(NSInteger)reduceBloodValue

                daoju:(NSString *)daoju;

- (BOOL)isloseProp;

- (void)setReduceBloodValue:(int)reduceBloodValue;


- (int)byAttackReduceBloodValue;

@end


@implementation Daojujiangshi

-(id)initWithNameType:(NSString *)type

     totileBloodValue:(NSInteger)totileBloodValue

     reduceBloodValue:(NSInteger)reduceBloodValue

                daoju:(NSString *)daoju

{

   self = [superinitWithNameType:type totileBloodValue:totileBloodValue reduceBloodValue:reduceBloodValue];

   if (self) {

       _daoju = daoju;

    }

    return self;

}

+(id)daojujiangshiWithType:(NSString *)type

     totileBloodValue:(NSInteger)totileBloodValue

     reduceBloodValue:(NSInteger)reduceBloodValue

                daoju:(NSString *)daoju

{

    Daojujiangshi *d = [[Daojujiangshialloc]

                       initWithNameType:type totileBloodValue:totileBloodValue reduceBloodValue:reduceBloodValuedaoju:daoju];

   return d;

}

- (BOOL)isloseProp

{

      return_lastBloodValue<(_totleBloodValue*0.5);

}

- (int)byAttackReduceBloodValue

{

   if ([self isloseProp]) {

        _lastBloodValue -=_reduceBloodValue ;

    }else

        _lastBloodValue -=(_reduceBloodValue-1) ;

    return_lastBloodValue;

}


@end


#import "Daojujiangshi.h"


@interface Tietongjiangshi :Daojujiangshi

{

   NSString *_weakness;

}

-(id)initWithNameType:(NSString *)type

     totileBloodValue:(NSInteger)totileBloodValue

     reduceBloodValue:(NSInteger)reduceBloodValue

                daoju:(NSString *)daoju

             weakness:(NSString *)weakness;

+(id)tietongjiangshiWithType:(NSString *)type

          totileBloodValue:(NSInteger)totileBloodValue

          reduceBloodValue:(NSInteger)reduceBloodValue

                     daoju:(NSString *)daoju

                  weakness:(NSString *)weakness;

- (BOOL)isloseProp;

- (BOOL)isWeakness;

- (int)byAttackReduceBloodValue;

@end


#import "Tietongjiangshi.h"


@implementation Tietongjiangshi

-(id)initWithNameType:(NSString *)type

     totileBloodValue:(NSInteger)totileBloodValue

     reduceBloodValue:(NSInteger)reduceBloodValue

                daoju:(NSString *)daoju

             weakness:(NSString *)weakness

{

   self = [superinitWithNameType:type totileBloodValue:totileBloodValue reduceBloodValue:reduceBloodValuedaoju:daoju];

   if (self) {

       _weakness = weakness;

    }

    return self;

}

+(id)tietongjiangshiWithType:(NSString *)type

            totileBloodValue:(NSInteger)totileBloodValue

            reduceBloodValue:(NSInteger)reduceBloodValue

                       daoju:(NSString *)daoju

                    weakness:(NSString *)weakness

{

    Tietongjiangshi *z = [[Tietongjiangshialloc]

                         initWithNameType:type totileBloodValue:totileBloodValue reduceBloodValue:reduceBloodValuedaoju:daoju weakness:weakness];

   return z;

}

- (BOOL)isloseProp

{

    return_lastBloodValue<=(_lastBloodValue*0.3);

}

- (int)byAttackReduceBloodValue

{

   if ([self isloseProp]) {

        _lastBloodValue -=_reduceBloodValue;

    }else

        _lastBloodValue -=_reduceBloodValue-2;

    return_lastBloodValue;

}

@end


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

{


    @autoreleasepool {

     

        Jiangshi *i = [JiangshijiangshiWithType:@"普通僵尸"totileBloodValue:50reduceBloodValue:3];

//        [i byAttackReduceBloodValue];

        Daojujiangshi *d = [DaojujiangshidaojujiangshiWithType:@"道具僵尸"totileBloodValue:80reduceBloodValue:2 daoju:@"飞镖"];

        Tietongjiangshi *z = [TietongjiangshitietongjiangshiWithType:@"铁桶僵尸"totileBloodValue:120reduceBloodValue:1 daoju:@"飞镖" weakness:@"头部"];

//        [z byAttackReduceBloodValue];

       while (1) {

           int lastBloodValue =  [i byAttackReduceBloodValue];

           NSLog(@"剩余血量:%d",lastBloodValue);

           if ([i isDeath]){

                [ideath];

               break;

            }

            

        }

       while (1) {

           int lastBloodValue =  [d byAttackReduceBloodValue];

           NSLog(@"剩余血量:%d",lastBloodValue);

           if ([d isDeath]){

                [ddeath];

               break;

            }

            

        }

       while (1) {

           int lastBloodValue =  [z byAttackReduceBloodValue];

           NSLog(@"剩余血量:%d",lastBloodValue);

           if ([z isDeath]){

                [zdeath];

               break;

            }

            

        }


   return 0;

    }

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值