1、首先了解类的基本框架
类包括,类的声明部分和类的实现部分
声明部分:
@interfce 类名:父类
{ //成员变量
@private //私有
@pulic //公有
@protected //受保护
}//一般情况下把成员属性定义为私有,通过公有的方法来访问
//方法名,及参数类型声明
-(id)init; //初始化
-(返回类型)方法名:(参数类型)参数名 方法名:(参数类型)参数名
。。。。。
@end
实现部分:
@implementation 类名
函数实现部分
@end
2、下面介绍武器类,属性及将要实现的方法
父类:Arm
属性:名字,价格,攻击力,攻击范围
方法:初始化,各成员变量的set和get方法,移动,攻击
子类:Gun,Knife,Boom
Gun:
属性:子弹数量,射程
方法:上子弹,开枪
Knife:
属性:颜色
方法:飞刀
Boom:
属性:爆炸范围,爆炸时间
方法:炸雷
main函数
创建一把刀,一把枪 ,一颗雷
分别移动到10,10;20,20;30,30;(坐标)
分别:飞刀 40,40 投雷 50,50 开枪 60,60 (开10枪)
3、代码部分
一、父类:Arm.h
#import
@interface Arm : NSObject
{@private
NSString * name;//名字
int price;//价格
int act;//攻击力
int area;//范围
}
//初始化init
-(id)init;
//设定名字
-(void)setName:(NSString *)nam;
//获取名字
-(NSString *)getName;
//设定价格
-(void)setPrice:(int )p;
//获取价格
-(int)getPrice;
//设定攻击力
-(void)setAct:(int)p;
//获取攻击力
-(int)getAct;
//设定攻击范围
-(void)setArea:(int)a;
//获取攻击范围
-(int)getArea;
//移动
-(void)moveToX:(int )x ToY:(int)y;
//攻击
-(void)fireToX:(int)x ToY:(int )y;
@end
Arm.m //实现部分
#import "Arm.h"
@implementation Arm
//初始化init
-(id)init{
if (self=[super init]) {
self->price=100;
self->act=10;
self->area=3;
self->name=@"武器";
}else
{
return nil;
}
return self;
}
//设定名字
-(void)setName:(NSString *)nam{
self->name=nam;
}
//获取名字
-(NSString *)getName{
return self->name;
}
//设定价格
-(void)setPrice:(int )p{
self->price=p;
}
//获取价格
-(int)getPrice{
return self->price;
}
//设定攻击力
-(void)setAct:(int)p{
self->act=p;
}
//获取攻击力
-(int)getAct{
return self->act;
}
//设定攻击范围
-(void)setArea:(int)a{
self->area=a;
}
//获取攻击范围
-(int)getArea{
return self->area;
}
//移动
-(void)moveToX:(int )x ToY:(int)y{
NSLog(@"%@正在移动到%d,%d",name,x,y);
}
//攻击
-(void)fireToX:(int)x ToY:(int )y{
NSLog(@"%@正在攻击到%d,%d",name,x,y);
}
@end
二、子类Gun.h
#import "Arm.h"
@interface Gun : Arm
{
@private
int number;//子弹数量
int far;//射程
}
-(id)init;
-(void)setNumber:(int) n;//上子弹
-(int)getNumber;
-(void)fireToX:(int)x ToY:(int)y;
@end
Gun.m
#import "Gun.h"
@implementation Gun
-(id)init{
if(self=[super init])
{
self->number=24;
}else
{
return nil;
}
return self;
}
-(void)setNumber:(int) n//上子弹
{
if(n>=0&&n<=100)
{
self->number=n;
}
}
-(int)getNumber{
return number;
}
-(void)fireToX:(int)x ToY:(int)y{
if(self->number>0)
{
self->number--;
NSLog(@"%@正在开枪到 %d,%d",[self getName],x,y);
}
else{
NSLog(@"没子弹了");
}
}
@end
三、子类Knife.h
#import "Arm.h"
@interface Knife : Arm
{ @public
NSString * color;
}
-(void)fireToX:(int)x ToY:(int)y;
@end
Knife.m
#import "Knife.h"
@implementation Knife
-(void)fireToX:(int)x ToY:(int)y{
NSLog(@"%@正在飞刀到%d,%d",[self getName],x,y);
}
@end
四、子类 Boom.h
#import "Arm.h"
@interface Boom : Arm
{@public
int boomArea;//爆炸范围
int btime;//爆炸时间
}
-(void)fireToX:(int)x ToY:(int)y;
@end
Boom.m
#import "Boom.h"
@implementation Boom
-(void)fireToX:(int)x ToY:(int)y{
NSLog(@"%@在%d秒后爆炸,位置为%d,%d",[self getName],time,x,y);
}
@end
main函数部分
#import "Gun.h"
#import "Knife.h"
#import "Boom.h"
#import "Arm.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Arm * arm;//武器指针
Gun* gun=[[Gun alloc]init];//创建一把枪
[gun setName:@"ak47"];
Knife * k1=[[Knife alloc]init];//创建一把刀
[k1 setName:@"小李"];
Boom * b1=[[Boom alloc]init];//创建一颗雷
[b1 setName:@"c4"];
[gun moveToX:20 ToY:20];
[k1 moveToX:30 ToY:30];
[b1 moveToX:40 ToY:40];
[k1 fireToX:30 ToY:30];
[b1 fireToX:40 ToY:40];
///开10枪
for(int i=0;i<10;i++)
{
[gun fireToX:20 ToY:20];
}
NSLog(@"剩余子弹%d",[gun getNumber]);
//////////////////
arm=gun;//先拿枪
[arm fireToX:40 ToY:40];
arm=k1;//再拿刀
[arm fireToX:40 ToY:40];
arm=b1;//再拿雷
[arm fireToX:40 ToY:40];
//oc中类型解析的方法
printf("\nisKindOfClass");
printf("\n%d",[arm isKindOfClass:[Arm class]]);
printf("\n%d",[arm isKindOfClass:[Boom class]]);
printf("\n%d",[arm isKindOfClass:[Gun class]]);
printf("\nisMemberOfClass");
printf("\n%d",[arm isMemberOfClass:[Arm class]]);
printf("\n%d",[arm isMemberOfClass:[Boom class]]);
printf("\n%d",[arm isMemberOfClass:[Gun class]]);
id obj;
obj=gun;
//判断一个对象中是否包含某个方法
SEL sel=@selector(setNumber:); //选择器
printf("\n%d",[obj respondsToSelector:sel]);//返回0或1
if([obj respondsToSelector:sel])
{
[obj performSelector:@selector(setName:) withObject:@"沙鹰"]; //通过选择器来实现赋值
}
NSLog(@"gun name%@,number%d",[gun getName],[gun getNumber]);
}
return 0;
}