//
// main.m
// 10-士兵开枪枪射击子弹
//演示对象作为方法的传递参数
//
// Created by smartlei on 15/5/24.
// Copyright (c) 2015年 smartlei. All rights reserved.
//
/*
枪类:
名称:Gun
属性:型号(_size)
方法:射出子弹
人类:
名称:Sodier
属性:姓名
方法:拿枪射击的动作
子弹类:
名称:Bullet
属性:子弹型号 (_size) 弹夹内子弹数量(_bulletCount)
方法:没有方法
*/
#import <Foundation/Foundation.h>
#pragma mark -
#pragma mark 子弹类声明
@interface Bullet:NSObject
{
@public
NSString *_size;//子弹的型号
int _bulletCount;//子弹数量
}
@end
#pragma mark -
#pragma mark 子弹类声明
@implementation Bullet
@end
#pragma mark -
#pragma mark 枪类声明
@interface Gun:NSObject
{
@public
NSString *_size;//枪的型号
}
-(void)shoot:(Bullet *)bullet;
@end
#pragma mark -
#pragma mark 枪类实现
@implementation Gun
-(void)shoot:(Bullet *)bullet//传入子弹对象
{
if(bullet->_bulletCount>0)
{
bullet->_bulletCount--;
NSLog(@"枪%@正在射击...,剩余子弹%d,",_size,bullet->_bulletCount);
}
else
NSLog(@"枪%@已经没有子弹了,请换弹夹",_size);
}
@end
#pragma mark -
#pragma mark 士兵类实现
@interface Soldier:NSObject
-(void)fireByGun:(Gun *)gun andBullet:(Bullet *)bullet;
@end
#pragma mark -
#pragma mark 士兵类实现
@implementation Soldier
{
@public
NSString *_name;
int life;
int level;
}
//士兵开火传入对象参数 枪名字 弹夹
-(void)fireByGun:(Gun *)gun andBullet:(Bullet *)bullet
{
[gun shoot:bullet];//枪
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
//创建一个枪对象
Soldier *s=[Soldier new];
s->_name=@"smartlei";
s->life=98;
s->level=2;
//创建一个对象
Gun *g=[Gun new];
g->_size=@"AK-47";
//创建一个子弹
Bullet *myBullet=[Bullet new];
myBullet->_size=@"5mm子弹";
myBullet->_bulletCount=3;
[s fireByGun:g andBullet:myBullet];
[s fireByGun:g andBullet:myBullet];
[s fireByGun:g andBullet:myBullet];
[s fireByGun:g andBullet:myBullet];
}
return 0;
}
输出:
2015-05-24 17:47:01.797 10-士兵开枪枪射击子弹[2692:141043] 枪AK-47正在射击...,剩余子弹2,
2015-05-24 17:47:01.798 10-士兵开枪枪射击子弹[2692:141043] 枪AK-47正在射击...,剩余子弹1,
2015-05-24 17:47:01.798 10-士兵开枪枪射击子弹[2692:141043] 枪AK-47正在射击...,剩余子弹0,
2015-05-24 17:47:01.798 10-士兵开枪枪射击子弹[2692:141043] 枪AK-47已经没有子弹了,请换弹夹