Objective-C语法应用

简单的动物园系统实现

#import <Foundation/Foundation.h>
#import "Animal.h"

//动物园
@interface Zoo : NSObject

@property (nonatomic, strong) Animal *animal;//动物
@property (nonatomic, assign) int foodSave;//食物储备

/**
 *  初始化方法 传入储备的食物数量
 */
- (id)initWithFoodSave:(int)foodSave;

@end
#import "Zoo.h"

@implementation Zoo

- (id)initWithFoodSave:(int)foodSave {
    if (self = [super init]) {
        _foodSave = foodSave;
    }
    return self;
}

@end

动物园中有各种动物,以下代码构建动物类,以继承方式实现:

#import <Foundation/Foundation.h>

@interface Animal : NSObject

@property (nonatomic, assign) int count;//数量
@property (nonatomic, assign) int eatFood;//食量
@property (nonatomic, assign) int productionCycle;//生产周期

//自定义初始化 传入3个参数:1.当前动物数量 2.当前动物每天吃的食物数量 3.生产周期为多少天
- (id)initWithCount:(int)cout andEatFood:(int)eatFood andProductionCycle:(int)productionCycle;

//吃东西
- (int)animalEatFood;

//生宝宝
- (int)productionBaby;

@end

#import "Animal.h"

@implementation Animal

- (id)initWithCount:(int)cout andEatFood:(int)eatFood andProductionCycle:(int)productionCycle {
    if (self = [super init]) {
        self.count = cout;
        self.eatFood = eatFood;
        self.productionCycle = productionCycle;
    }
    return self;
}

//吃东西
- (int)animalEatFood {
    NSLog(@"吃东西了!!!! %d %d", self.eatFood, self.count);
    return self.eatFood * self.count;
}

//生宝宝
- (int)productionBaby {
    return 0;
}

@end
#import "Animal.h"

@interface Panda : Animal

@end

#import "Panda.h"

@implementation Panda

//重写父类方法
- (int)animalEatFood {
    NSLog(@"熊猫吃掉 %d 个单位的食物, 现有 %d 只", self.eatFood * self.count, self.count);
    return self.eatFood * self.count;
}

- (int)productionBaby {
    NSLog(@"熊猫生产了 3 个宝宝");
    self.count += 3;
    return 3;
}

@end

#import "Animal.h"

@interface Elephant : Animal

@end

#import "Elephant.h"

@implementation Elephant

- (int)animalEatFood {
    NSLog(@"大象吃掉 %d 个单位的食物, 现有 %d 只", self.eatFood * self.count, self.count);
    return self.eatFood * self.count;
}

- (int)productionBaby {
    NSLog(@"大象生产了 1 个宝宝");
    self.count += 1;
    return 1;
}

@end

#import "Animal.h"

@interface Kangaroo : Animal

@end

#import "Kangaroo.h"

@implementation Kangaroo

- (int)animalEatFood {
    NSLog(@"袋鼠吃掉 %d 个单位的食物, 现有 %d 只", self.eatFood * self.count, self.count);
    return self.eatFood * self.count;
}

- (int)productionBaby {
    NSLog(@"袋鼠生产了 2 个宝宝");
    self.count += 2;
    return 2;
}

@end

以下是main函数中的测试代码:

#import <Foundation/Foundation.h>
#import "Zoo.h"
#import "Panda.h"
#import "Elephant.h"
#import "Kangaroo.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //创建动物员对象 并对储存的食物进行初始化
        Zoo *zoo = [[Zoo alloc] initWithFoodSave:1000];
        //初始化各种动物信息 (运用多态)
        Animal *panda = [[Panda alloc] initWithCount:2 andEatFood:1 andProductionCycle:3];
        Animal *elephant = [[Elephant alloc] initWithCount:2 andEatFood:5 andProductionCycle:5];
        Animal *kangaroo = [[Kangaroo alloc] initWithCount:2 andEatFood:2 andProductionCycle:4];

        int day = 1;
        while (zoo.foodSave > 0) {
            //到了动物的生产周期时,动物开始生产
            if (day % panda.productionCycle == 0) {
                [panda productionBaby];
            }
            if (day % elephant.productionCycle == 0) {
                [elephant productionBaby];
            }
            if (day % kangaroo.productionCycle == 0) {
                [kangaroo productionBaby];
            }

            int usedFood = [panda animalEatFood] + [elephant animalEatFood] + [kangaroo animalEatFood];
            zoo.foodSave -= usedFood;

            NSLog(@"第%d天,剩余食物%d", day++, zoo.foodSave);
            //如果食物已经不足动物使用一天,那就必须要采购了,此时应该不再继续,因此让食物为0
            if (zoo.foodSave < usedFood) {
                zoo.foodSave = 0;
            }
        }
    }
    return 0;
}
时间: 2024-10-06 18:44:49

Objective-C语法应用的相关文章

初学Objective - C语法之代码块(block)

一.block声明 1.无参数,无返回值: void (^sayHi)(); 2.有参数,有返回值: NSInteger (^operateOfValue)(NSInteger num); block的声明:返回值类型(^block变量名)(参数列表) 脱字符(^)是块的语法标记 二.block实现 block变量名 = ^返回值类型(参数列表) 1.  sayHi = ^{ NSLog(@"你好"); }; 2. operateOfValue = ^ NSInteger (NSInt

《黑马程序员》 NSArray和NSMutableArray的使用(Objective - c语法)

------- <a href="http://www.itheima.com" target="blank">Windows Phone 7手机开发</a>.<a href="http://www.itheima.com" target="blank">.Net培训</a>.期待与您交流! ------- 1 NSArray 的使用方法 • Foundation中数组(NSAr

iOS开发——语法篇OC篇&amp;高级语法精讲二

Objective高级语法精讲二 Objective-C是基于C语言加入了面向对象特性和消息转发机制的动态语言,这意味着它不仅需要一个编译器,还需要Runtime系统来动态创建类和对象,进行消息发送和转发.下面通过分析Apple开源的Runtime代码(我使用的版本是objc4-646.tar)来深入理解Objective-C的Runtime机制. Runtime数据结构 在Objective-C中,使用[receiver message]语法并不会马上执行receiver对象的message方

iOS 版本更新摘要(三)iOS 8.x

[What's New in iOS 8.x](https://developer.apple.com/library/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS8.html#//apple_ref/doc/uid/TP40014205-SW1 "What's New in iOS 8.x") ####iOS 8.0 #App Extensions iOS 8.0 提供了 app 扩展点,让你可以在系统的选择区域扩展选择区域.

Pentaho BI server 中 CCC table Component 的使用小技巧

我使用的版本 Pentaho BI Server 5.3.0.0.213 CDE/CDF/CDA/CCC 15.04.16 stable Q: 如何设置表格中各种提示文字的语言(默认为英语)? CDE -> table Component -> Advanced Properties -> oLanguage,编辑该属性,语法需满足 JavaScript Objective 的语法,可以设置的参数如下: { "sProcessing": "Processin

iOS开发核心语言Objective C —— 面向对象思维、setter和getter方法及点语法

本分享是面向有意向从事iOS开发的伙伴们.或者已经从事了iOS的开发人员.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基础,建议您先翻阅我之前分享的iOS开发分分钟搞定C语言系列.然后在開始Objective C语言的学习,假设您遇到问题也能够与我探讨,另外将无偿分享自己整理的大概400G iOS学习视频及学习资料.都是干货哦.能够新浪微博私信?关注极客James.期待与您的共同学习和探讨.! 由于时间有限,每天在工作之余整理的学习分享.难免有不足之

Objective - C中属性和点语法的使用

一.属性 属性是Objective—C 2.0定义的语法,为实例变量提供了setter.getter方法的默认实现能在一定程度上简化程序代码,并且增强实例变量的访问安全性 OC中的属性机制提供了便捷的设置和获取实例变量的方式,或者说属性提供了一个默认的设置器和访问器的实现:属性提供的方法是现实可配置的,属性的好处:相当于自己编写这一对方法,属性提供了一系列清晰分明的说明参数来定义设置器和访问器的行为,编译器可以根据你设置的说明参数为你生成相应的方法,减少你的代码量和维护工作量 设置器(sette

iOS开发——语法OC篇&amp;Objective-C新特性的总结

Objective-C新特性的总结 1.nonnull nonnull : 标示当前属性不为空,让外界放心用,只做标示用,即使为空,也木有办法    相当于swift里面的 ! 号 @property (nonnull, nonatomic, strong) NSString *name; 2.nullablenullable : 标示当前属性可能为空,让外界使用时注意    相当于swift里面的 ? 号 @property (nullable, nonatomic, strong) NSSt

Objective - C setter,getter与实例变量的关系, 属性, 点语法

什么时setter,getter, 在OC里, 为实例变量赋zhi的方法称作setter(设置器) 读取实例变量值的方法称作getter(访问器) 我们之前写的那些赋值取值的方法都可以称作setter和getter setter.getter的书写格式 OC里规定里setter和getter的书写格式 如果一个实例变量是 int age: 或者int_age: setter的书写格式如下 - (void)setAge:(int)age;即set+首字母大写的实例变量名(忽略下划线) getter

[好程序员训练营]Objective-C学习笔记---点语法

<A href="http://www.goodprogrammer.org/" target="blank">ios培训</A>------我的OC语言笔记,期待与您交流! 在java等面向对象的语言中,常常会用到obj.方法,或者用到obj.属性来调用对象的方法和属性.OC为了使使用其他语言的程序设计者更好学习OC,所以OC也引入了点语法,但是从根本上讲,OC的点语法和java等语言的点语法还是有一定区别的,下面我们就来看看怎么使用OC的