您的位置:首页 > 其它

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

2015-07-13 10:37 701 查看
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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: