对象作为参数的连续传递
// // main.m // 对象作为参数的连续传递 // 方法的形参,当调用该方法的时候,接收了值,才会给该方法中的形参分配存储空间, // 如果传进来了是对象的指针,就保存了对象的地址,也就是指向了那个对象 #import <Foundation/Foundation.h> #pragma mark - 弹夹 //弹夹 //事物名称: 弹夹(Clip) //属性:子弹(Bullet) //行为:上子弹(addBullet) @interface Clip : NSObject { @public int _bullet; // 子弹的数量 } - (void)addBullet; @end @implementation Clip - (void)addBullet{ _bullet=10; } @end #pragma mark - 枪 //枪 //事物名称:枪(Gun) //属性:弹夹(clip) , 型号(model) //行为:上弹夹(addClip),射击 @interface Gun : NSObject { @public Clip *_clip; int _model; } - (void)addClip:(Clip*)mClip; // 枪可以接收一个弹夹 - (void)shoot:(Clip*)mClip; // 枪可以射击,没射击一次,弹夹的子弹数减1 @end @implementation Gun - (void)addClip:(Clip *)mClip{ _clip=mClip; } - (void)shoot:(Clip *)mClip{ if (mClip->_bullet>0) { NSLog(@"射击了一次,还剩%i个子弹",--mClip->_bullet); }else{ NSLog(@"没有子弹了,该换弹夹了"); } } @end #pragma mark - 士兵 //士兵 //事物名称: 士兵(Soldier) //属性:姓名(name), 身高(height), 体重(weight) //行为:打枪(fire), 打电话(callPhone) // @interface Slodier : NSObject { @public NSString *_name; int _height; int _weight; } - (void)fire:(Gun*)mGun and:(Clip*)mClip; - (void)changeClip:(Gun*)mGun and:(Clip *)mClip; - (void)call; @end @implementation Slodier - (void)fire:(Gun *)mGun and:(Clip *)mClip{ [mGun shoot:mClip]; } - (void)changeClip:(Gun*)mGun and:(Clip *)mClip{ [mGun addClip:mClip]; } -(void)call{ NSLog(@"士兵打电话了"); } @end int main(int argc, const char * argv[]) { // 给士兵一个枪,拿到一个弹夹,调用枪的上弹夹的功能,然后射击 //创建一个弹夹 Clip *pc=[Clip new]; // 初始化弹夹对象 pc->_bullet=5; //创建一个枪对象 Gun *pg=[Gun new]; // 初始化枪对象 pg->_clip=pc; pg->_model=47; // 创建一个士兵对象 Slodier *ps=[Slodier new]; // 初始化士兵对象 ps->_name=@"大兵瑞恩"; ps->_height=190; ps->_weight=100; [ps fire:pg and:pc]; [ps fire:pg and:pc]; [ps fire:pg and:pc]; [ps fire:pg and:pc]; [ps fire:pg and:pc]; [ps fire:pg and:pc]; // 创建一个新的弹夹 Clip *newPc = [Clip new]; // 初始化这个新的弹夹 newPc->_bullet=5; // 士兵会换弹夹,会调用枪的换弹夹功能换 [ps changeClip:pg and:newPc]; // 继续射击 NSLog(@"更换弹夹之后,继续射击"); [ps fire:pg and:newPc]; return 0; }