pragma mark 对象作为方法的参数连续传递(上)
pragma mark 概念
/**
// 注意: 在企业级开发中 千万不要随意修改一个方法
// 因为这个方法有可能多处用到
*/
pragma mark 代码
#import <Foundation/Foundation.h>
#pragma mark - 类
#pragma mark - 弹夹
@interface Clip : NSObject
{
@public
int _bullet; //子弹
}
// 上子弹的方法
- (void)addBullet;
@end
@implementation Clip
- (void)addBullet
{
// 上子弹
_bullet = 10;
}
@end
#pragma mark - 枪
@interface Gun : NSObject
{
//@public
// int _bullet; //子弹
Clip *clip; // 弹夹
}
// 射击的方法
//- (void)shoot;
// 注意: 在企业级开发中 千万不要随意修改一个方法
- (void)shoot;
// 想要射击 必须传递一个弹夹
- (void)shoot:(Clip *)c;
@end
@implementation Gun
//- (void)shoot
//{
// if (_bullet > 0) {
// _bullet --;
// NSLog(@"打了一枪 还剩余%d发",_bullet);
// }
// else
// {
// NSLog(@"没有子弹了,请换弹夹");
// }
//}
- (void)shoot:(Clip *)c
{
// 判断有没有弹夹
if(c != nil) // nil == null == 没有值
{
// 判断有没有子弹
if (c->_bullet >0)
{
c->_bullet -= 1;// 子弹减1
NSLog(@"打了一枪 还剩余%d发",c->_bullet);
}
else
{
NSLog(@"没有子弹了");
[c addBullet];
}
}
else
{
NSLog(@"没有弹夹,请换弹夹");
}
}
@end
#pragma mark - 士兵
@interface Soldier : NSObject
{
@public
NSString *_name;
double _height;
double _weight;
}
//开火
- (void)fire:(Gun *)gun;
// 开火,给士兵一把枪 和 一个弹夹
- (void)fire:(Gun *)g clip:(Clip *)clip;
@end
@implementation Soldier
- (void)fire:(Gun *)gun
{
[gun shoot];
}
// Gun * g = gun
- (void)fire:(Gun *)g clip:(Clip *)clip
{
// 判断 是否有枪和子弹
if (g != nil && clip != nil) {
[g shoot:clip];
}
}
@end
#pragma mark main函数
int main(int argc, const char * argv[])
{
// 1.创建士兵
Soldier *sp = [Soldier new];
sp->_name = @"狗蛋";
sp->_height = 1.92;
sp->_weight = 88.0;
// 2.创建一把枪
Gun *gun = [Gun new];
// gun->_bullet = 10;
// 3.创建弹夹
Clip *clip = [Clip new];
[clip addBullet];// 添加子弹
// 4.让士兵开枪
// [sp fire];
[sp fire:gun clip:clip];
#warning 让对象作为函数的参数传递
return 0;
}