文档章节

第02天OC语言(10):对象作为返回值

lyh2017iOS
 lyh2017iOS
发布于 2017/07/12 00:11
字数 406
阅读 0
收藏 0

#####一、概念 #####二、代码

#import <Foundation/Foundation.h>
#pragma mark 类
#pragma mark - 3.弹夹

@interface Clip : NSObject
{
@public
    int _bullet;
}
- (void)addBullet;
@end

@implementation Clip
- (void)addBullet
{
    // 上子弹
    _bullet = 10;
}
@end

#pragma mark - 2.枪
@interface Gun : NSObject
{
@public
    Clip *clip; // 弹夹
    
}
// 注意 : 在企业开发中 千万不要随意修改一个方法
- (void)shoot;
// 想要射击,必须传递弹夹
- (void)shoot:(Clip *)c;

@end

@implementation Gun

- (void)shoot:(Clip *)c
{
    
    if (c != nil) { // nul == null == 没有值
        // 判断有没有子弹
        if (c->_bullet > 0) {
            c->_bullet -=1;
            NSLog(@"打了一枪 %i",c->_bullet);
        }
        else
        {
            NSLog(@"没有子弹了");
        }
    }
    else
    {
        NSLog(@"没有弹夹 ,请换弹夹");
    }
}
@end
#pragma mark - 1.士兵
@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 *)g
{
    [g shoot];
}

- (void)fire:(Gun *)g Clip:(Clip *)clip
{
    if (g != nil &&
        clip != nil){
        [g shoot:clip];
    }
}
@end

#pragma mark - 0.商店

@interface Shop : NSObject

// 买枪
+ (Gun *)buyGun:(int)monery;
// 买弹夹
+ (Clip *)buyClip:(int)monery;

@end

@implementation Shop

+ (Gun *)buyGun:(int)monery
{
    // 1.创建一把枪
    Gun *g = [Gun new]; // 通过 new 创建出来的对象 存储在堆中,堆中的数据 不会自动释放
    // 2.返回一把枪
    return g;
}
// 买弹夹
+ (Clip *)buyClip:(int)monery
{
    // 1.创建弹夹
    Clip *clip = [Clip new];
    [clip addBullet]; // 添加子弹
    // 2.返回弹夹
    return clip;
}

@end



#pragma mark - main函数
int main(int argc, const char * argv[])
{
    // 1.创建士兵
    Soldier *s = [Soldier new];
    s->_name = @"lyh";
    s->_height = 1.71;
    s->_weight = 65.0;
    
    // 商家对象
//    Shop *shop = [Shop new];
    
    // 2.创建枪
//    Gun *gp = [Gun new];
    // 2.购买手枪
    Gun *gp = [Shop buyGun:888];
    
    
    // 3.创建弹夹
//    Clip *clip = [Clip new];
//    [clip addBullet];
    
    // 3. 购买弹夹
    Clip *clip = [Shop buyClip:88];
    
    // 4.士兵开火
    [s fire:gp Clip:clip];

    
    return 0;
}

© 著作权归作者所有

共有 人打赏支持
lyh2017iOS
粉丝 1
博文 357
码字总数 137380
作品 0
朝阳
Object-C基础-04-自定义构造方法和description方法

知识回顾 在第5讲中已经介绍了如何定义类和创建并初始化对象,比如有Student这个类 1.Student.h #import <Foundation/Foundation.h> @interface Student : NSObject { int _age;}- (void)se......

Corwien
2016/03/17
23
0
OC字符串

1.OC字符串 C语言中,字符和字符串都为常量。 OC中仍然可以使用C的字符串和字符,但其有专有的字符类,可以声明专有的字符串对象。OC的字符串,结尾不考虑尾0,查字符串位置时,起始为0,这和...

飞奔的土豆
2012/12/10
0
0
Swift4.0基础知识回顾

简单介绍一下Swift Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序,Swift语言让应用开发更简单、更快、更稳定,确保最终应用有着更好的质量更多了解Swift可以去《The...

博行天下
2017/12/06
0
0
iOS-消息转发机制

前言 其他编程语言所说的函数调用,在oc中被称作为发送消息;消息转发的作用,开发者可以在找不到的方法的情况下,可以通过动态添加方法或者是消息转发,确定本次发送消息是否成功,通过这样...

麦兜卖鱼丸
2016/03/27
66
0
Cocoa改造前篇 - 说在前面的

更好的阅读体验请点击 原文 从面相对象说起 (Object-Oriented Programming,简记为OOP)这个概念大家都有所耳闻,目前(2017.12),在Tiobe世界语言排行榜上排前十的语言中,C语言和Assembl...

秋刀生鱼片
2017/12/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

sourcetree 离线免注册登录安装教程

Sourcetree是一个优秀的git可视化管理工具,深受开发者喜爱Sourcetree官网,但是在安装时需要谷歌账户登录,需要翻qiang才可以,此一点一直被人们所诟病。今天本教程就为大家提供离线免登陆安...

QQZZFT
18分钟前
1
0
使用 PostgreSQL 解决一个实际的统计分析问题

使用 PostgreSQL 解决一个实际的统计分析问题作者:老农民(刘启华)Email: 46715422@qq.com 之前有个朋友扔给我一个奇葩需求,他们公司之前做了一批问卷调查,全部都是统一格式的excel...

新疆老农民
21分钟前
1
0
TypeScript基础入门之高级类型的映射类型

转发 TypeScript基础入门之高级类型的映射类型 高级类型 映射类型 一个常见的任务是将一个已知的类型每个属性都变为可选的: interface PersonPartial {    name?: string;    age?...

durban
36分钟前
1
0
Dubbo源码分析(6):Dubbo内核实现之基于SPI思想Dubbo内核实现

SPI接口定义 定义了@SPI注解 package com.alibaba.dubbo.common.extension; import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.an......

郑加威
36分钟前
1
0
RxJS的另外四种实现方式(后记)—— 同时实现管道和链式编程

目录 RxJS的另外四种实现方式(序) RxJS的另外四种实现方式(一)——代码最小的库 RxJS的另外四种实现方式(二)——代码最小的库(续) RxJS的另外四种实现方式(三)——性能最高的库 Rx...

一个灰
39分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部