1.对象作为方法的参数连续传递
实现功能:士兵开枪 枪射击子弹
枪类:
名称:Gun 属性:型号(_size),子弹个数(_bulletCount) 行为:射击
人类
名称:Soldier
属性:姓名(_name) life level(等级) 行为:开枪
具体代码如下:
//
// main.m
// 对象作为方法的参数连续传递
//
// Created by wenjim on 17/9/12.
// Copyright 2017年 WenJim. All rights reserved.
//
#import <Foundation/Foundation.h>
/*
士兵
事物名称:士兵(Soldier)
属性:姓名(name),身高(height),体重(weight)
行为:打枪(fire),打电话(callPhone)
枪
事物名称:枪(Gun)
属性:弹夹(Clip),型号(model)
行为:上弹夹(addClip)
弹夹
事物名称:弹夹(Clip)
属性:子弹(Bullet)
行为:上子弹(addBullet)
*/
@interface Clip : NSObject
{
@public
int _bullet;// 子弹
}
// 上子弹的方法
-(void)addBullet;
@end
@implementation Clip
-(void)addBullet
{
// 上子弹
_bullet = 10;
}
@end
#pragma mark - 枪
@interface Gun : NSObject
{
Clip *clip; // 弹夹
}
// 射击的方法
// 注意:在企业级开发中千万不要随意修改一个方法
-(void)shoot;
// 想要射击,必须传递一个弹夹
-(void)shoot:(Clip *)c;
@end
@implementation Gun
-(void)shoot
{
// // 判断是否有子弹
// if (_bullet > 0) {
// NSLog(@"打第%i枪",_bullet);
// _bullet --;
// }else{
// NSLog(@"没子弹,请更换弹夹");
// }
}
-(void)shoot:(Clip *)c
{
// 判断有没有弹夹
if (c != nil) {
// nil == null == 没有值
// 判断有没有子弹
if (c -> _bullet > 0) {
c ->_bullet -=1;
NSLog(@"打第%i枪",c ->_bullet);
}else{
NSLog(@"没有子弹了");
}
}else{
NSLog(@"没子弹,请更换弹夹");
}
}
@end
#pragma mark - 士兵
@interface Soldier : NSObject
{
@public
NSString * _name;
int * lifeLevel;// 等级
double _height;
double _weight;
}
// 开火
-(void)Fire:(Gun *)gun;
// 开火,给士兵一把枪和一个弹夹
-(void)Fire:(Gun *)gun clip:(Clip *)clip;
@end
@implementation Soldier
-(void)Fire
{
NSLog(@"打了一枪");
}
// Gun * g = gun
-(void)Fire:(Gun *)gun
{
[gun shoot];
}
-(void)Fire:(Gun *)gun clip:(Clip *)clip
{
// 判断是否有枪和子弹
if (gun != nil && clip != nil) {
[gun shoot:clip];
}else{
NSLog(@"请给予士兵一把枪和弹夹");
}
}
@end
#pragma mark - 程序调用
int main(int argc, const char * argv[]) {
// 1.创建士兵
Soldier * soldier = [Soldier new];
soldier -> _name = @"WenJim";
soldier -> _height = 1.71;
soldier -> _weight = 74;
// 2. 创建一把枪
Gun * gun = [Gun new];
// gun -> _bullet = 10;
// 3. 创建弹夹
Clip * clip = [Clip new];
// clip -> _bullet = 10;
[clip addBullet];
// 4.让士兵开枪
// 让对象作为方法的参数传递
// [soldier Fire:gun]; // 地址
[soldier Fire:gun clip:clip];
return 0;
}
2.对象作为方法的参数连续传递
具体代码如下
//
// main.m
// 对象作为返回值类型
//
// Created by wenjim on 17/9/12.
// Copyright 2017年 WenJim. All rights reserved.
//
#import <Foundation/Foundation.h>
/*
士兵
事物名称:士兵(Soldier)
属性:姓名(name),身高(height),体重(weight)
行为:打枪(fire),打电话(callPhone)
枪
事物名称:枪(Gun)
属性:弹夹(Clip),型号(model)
行为:上弹夹(addClip)
弹夹
事物名称:弹夹(Clip)
属性:子弹(Bullet)
行为:上子弹(addBullet)
*/
@interface Clip : NSObject
{
@public
int _bullet;// 子弹
}
// 上子弹的方法
-(void)addBullet;
@end
@implementation Clip
-(void)addBullet
{
// 上子弹
_bullet = 10;
}
@end
#pragma mark - 枪
@interface Gun : NSObject
{
Clip *clip; // 弹夹
}
// 射击的方法
// 注意:在企业级开发中千万不要随意修改一个方法
// 想要射击,必须传递一个弹夹
-(void)shoot:(Clip *)c;
@end
@implementation Gun
-(void)shoot:(Clip *)c
{
// 判断有没有弹夹
if (c != nil) {
// nil == null == 没有值
// 判断有没有子弹
if (c -> _bullet > 0) {
c ->_bullet -=1;
NSLog(@"打第%i枪",c ->_bullet);
}else{
NSLog(@"没有子弹了");
}
}else{
NSLog(@"没子弹,请更换弹夹");
}
}
@end
#pragma mark - 士兵
@interface Soldier : NSObject
{
@public
NSString * _name;
int * lifeLevel;// 等级
double _height;
double _weight;
}
// 开火,给士兵一把枪和一个弹夹
-(void)Fire:(Gun *)gun clip:(Clip *)clip;
@end
@implementation Soldier
-(void)Fire
{
NSLog(@"打了一枪");
}
-(void)Fire:(Gun *)gun clip:(Clip *)clip
{
// 判断是否有枪和子弹
if (gun != nil && clip != nil) {
[gun shoot:clip];
}else{
NSLog(@"请给予士兵一把枪和弹夹");
}
}
@end
@interface Shop : NSObject
// 买枪
-(Gun *)buyGun:(int)monery;
// 买弹夹
-(Clip *)buyClip:(int)monery;
@end
@implementation Shop
-(Gun *)buyGun:(int)monery
{
// 1.创建一把枪
Gun * gun = [Gun new]; // 通过new创建出来的对象存储在堆中,堆中的数据不会自动释放
// 2.返回一把枪
return gun;
}
-(Clip *)buyClip:(int)monery
{
// 1.创建一个弹夹
Clip * clip = [Clip new];
[clip addBullet];
// 2.返回一个弹夹
return clip;
}
@end
#pragma mark - 程序调用
int main(int argc, const char * argv[]) {
// 1.创建士兵
Soldier * soldier = [Soldier new];
soldier -> _name = @"WenJim";
soldier -> _height = 1.71;
soldier -> _weight = 74;
// // 2. 创建一把枪
// Gun * gun = [Gun new];
//
// // 3. 创建弹夹
// Clip * clip = [Clip new];
// [clip addBullet];
Shop * shop = [Shop new];
// 2.购买枪
Gun * gun = [shop buyGun:888];
// 3.购买弹夹
Clip * clip = [shop buyClip:80];
// 4.让士兵开枪
[soldier Fire:gun clip:clip];
return 0;
}