OC面向对象的三大特征(封装 继承 多态)习题1

来源:互联网 发布:yum 安装telnet命令 编辑:程序博客网 时间:2024/05/10 23:58
OC面向对象的三大特征
封装  继承  多态

封装
1)完整的说是成员变量的封装。)在成语方法里面的成员变量最好不要使用@public这样会直接暴露在外面被别人随随便便修改,封装的方法还可以达到过滤无效数据的作用。
2)对成员变量只读(readonly):只允许外界访问我的no,不允许外界修改我,只需要提供get方法。
3)对成员变量只写:不允许外界访问我的no,只允许外界修改我,只需要提供set get方法。

继承
1)继承的结构  @interface A : B (A 继承了B,相当于拥有了A里面的所有成员变量和方法)
2)继承的好处:
1> 抽取重复代码
2> 建立了类之间的关系
3> 子类可以拥有父类中的所有成员变量和方法
4> 基本上所有类的根类是NSObject

多态
1)多态:多种形态,父类指针指向子类对象,调用方法时会检测对象的真实形象。
1>没有继承就没有多态
2>代码的体现:父类类型的指针指向子类对象
3>好处:如果函数\方法参数中使用的是父类类型,可以传入父类、子类对象


1> [self 方法名]可以调用其他对象方法\类方法 

习题1
打僵尸。需求:
定义普通僵尸类:实例变量:僵尸种类、僵尸总血量、僵尸每次失血量。方法:初始化、被打击失血、死亡。
定义路障僵尸类:实例变量:僵尸种类、僵尸总血量、僵尸每次失血量,道具,弱点。方法:初始化、被打击失血、失去装备、死亡。
定义铁桶僵尸类:实例变量:僵尸种类、僵尸总血量、僵尸每次失血量,道具,弱点。方法:初始化、被打击失血、失去装备、死亡。

For循环 模拟攻击,创建3个僵尸对象。
(1)、普通僵尸。总血量50,每次失血3.
(2)、路障僵尸。总血量80,有路障时,每次失血2,血量剩余一半时,失去路障,每次失血3.
(3)、铁桶僵尸。总血量120,有铁桶时,每次失血1,血量剩余1/3时,失去铁桶,每次失血3.
循环攻击过程中:每个僵尸被攻击时,输出本次丢失血量,剩余血量。丢失道具时,输出丢失的道具。僵尸死亡时,输出已死亡。
最后一个僵尸死亡时,攻击停止,循环结束。输出总攻击次数。

工程:


Ordinary.h

////  Ordinary.h//  Play_Zombie////  Created by jesee on 15/7/12.//  Copyright (c) 2015年 jesee. All rights reserved.//#import <Foundation/Foundation.h>@interface Ordinary : NSObject{    NSString *_Name;//僵尸名    int _Allblood;//总血量    int _Lostblood;//正常掉血量    int _Propsblood;//有道具掉血量    int _temp;//中间量存总血量}-(instancetype)initWithName:(NSString *)Name Allblood:(int)Allblood Lostblood:(int)Lostblood Propslood:(int)Propsblood;-(void)Lostlood;-(void)die;-(void)setAllblood:(int)Allblood;-(int)Allbood;@end



Ordinary.m

#import "Ordinary.h"@implementation Ordinary//初始化-(instancetype)initWithName:(NSString *)Name Allblood:(int)Allblood Lostblood:(int)Lostblood Propslood:(int)Propsblood;{    self = [super init];    if (self) {        _Name=Name;        _Allblood=Allblood;        _Lostblood=Lostblood;        _Propsblood=Propsblood;        _temp=Allblood;    }    return self;}-(void)Lostlood{    if (_Allblood>_Lostblood&&_Allblood>0) {        _Allblood-=_Lostblood;        NSLog(@"普通僵尸 本次丢失血量%d,剩余血量%d",_Lostblood,_Allblood);    }    else    {        NSLog(@"普通僵尸 本次丢失血量%d,剩余血量%d",_Allblood,0);        [self die];        _Allblood-=_Allblood;    }}-(void)die{        NSLog(@"%@ die",_Name);}-(void)setAllblood:(int)Allblood{    _Allblood=Allblood;}-(int)Allbood{    return _Allblood;}@end


Roadblock.h

#import "Ordinary.h"@interface Roadblock : Ordinary-(void)LostProps;-(void)Lostlood;@end

Roadblock.m

#import "Roadblock.h"@implementation Roadblock-(void)LostProps{    NSLog(@"Lost Roadblock");}-(void)Lostlood{    if (_Allblood>_Lostblood&&_Allblood>0)    {        if (_Allblood>_temp/2) {            _Allblood-=_Propsblood;            NSLog(@"路障僵尸 本次丢失血量%d,剩余血量%d",_Propsblood,_Allblood);        }        if (_Allblood<=_temp/2) {            if (_Allblood==_temp/2) {                [self LostProps];            }            _Allblood-=_Lostblood;            NSLog(@"路障僵尸 本次丢失血量%d,剩余血量%d",_Lostblood,_Allblood);        }    }    else    {        NSLog(@"路障僵尸 本次丢失血量%d,剩余血量%d",_Allblood,0);        [super die];        _Allblood-=_Allblood;    }}@end

Bucket.h

#import "Ordinary.h"@interface Bucket : Ordinary-(void)LostProps;-(void)Lostlood;@end

Bucket.m

#import "Bucket.h"@implementation Bucket-(void)LostProps{    NSLog(@"Lost Bucket");}-(void)Lostlood{    if (_Allblood>_Lostblood&&_Allblood>0)    {        if (_Allblood>_temp/3) {            _Allblood-=_Propsblood;            NSLog(@"铁桶僵尸 本次丢失血量%d,剩余血量%d",_Propsblood,_Allblood);        }        if (_Allblood<=_temp/3) {            if (_Allblood==_temp/3) {                [self LostProps];            }            _Allblood-=_Lostblood;            NSLog(@"铁桶僵尸 本次丢失血量%d,剩余血量%d",_Lostblood,_Allblood);        }    }    else    {        NSLog(@"铁桶僵尸 本次丢失血量%d,剩余血量%d",_Allblood,0);        [super die];        _Allblood-=_Allblood;    }}@end

main.m

#import <Foundation/Foundation.h>#import "Ordinary.h"#import "Roadblock.h"#import "Bucket.h"int main(int argc, const char * argv[]) {    @autoreleasepool {                Ordinary *p1=[[Ordinary alloc]initWithName:@"普通僵尸" Allblood:50 Lostblood:3 Propslood:0];        Roadblock *p2=[[Roadblock alloc]initWithName:@"路障僵尸" Allblood:80 Lostblood:3 Propslood:2];        Bucket *p3=[[Bucket alloc]initWithName:@"铁桶僵尸" Allblood:120 Lostblood:3 Propslood:1];        int count=0;        while (1) {            if ([p1 Allbood]>0)            {                [p1 Lostlood];count++;                            }            if ([p2 Allbood]>0) {                [p2 Lostlood];count++;            }            if ([p3 Allbood]>0) {                [p3 Lostlood];count++;            }            if ([p1 Allbood]==0&&[p2 Allbood]==0&&[p3 Allbood]==0) {                break;            }        }        NSLog(@"总攻击次数%d",count);










0 0