A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 魏武 高级黑马   /  2015-8-16 23:07  /  792 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*

设计一个”狗“类
 1> 属性
 * 颜色
 * 速度(单位是m/s)
 * 性别
 * 体重(单位是kg)
 
 2> 行为
 * 吃:每吃一次,体重增加0.5kg,输出吃完后的体重
 * 吠(叫):输出所有的属性
 * 跑:每跑一次,体重减少0.5kg,输出速度和跑完后的体重
 * 比较颜色:跟别的狗比较颜色,如果一样,两个值做减法得零,返回NO(零值),不一样,做减法得到非零值,返回YES(1)
 * 比较速度:跟别的狗比较速度,返回速度差(自己的速度 - 其他狗的速度)


*/
#import <Foundation/Foundation.h>

typedef enum{
    kColorWhite,
    kColorBlack,
    kColorYellow,
}Color;
typedef enum {
    kSexGong,
    kSexMu,
    kSexYao,
}Sex;
#pragma mark 定义狗
@interface Dog: NSObject{
  //狗的属性
    @public
    Color _color;
    Sex _sex;
    int _speed;
    float _weight;
}
-(void)eat:(NSString *)foodName;
-(void)run;
-(void)bark;
-(BOOL)isCompareColorWithOther:(Dog *)dog;
-(float)CompareWeightWithOther:(Dog *)dog;
//狗的方法的声明
@end

#pragma mark 狗的方法
@implementation Dog
//狗的方法的实现
-(void)eat:(NSString *)foodName{//这里需要传入食物名字
    _weight+=0.5;
    NSLog(@"狗吃了%@之后,体重增加为%.2f",foodName,_weight);
}
-(void)run{
    _weight-=0.5;
    NSLog(@"狗跑了一次,体重减少为%.2f",_weight);
}
-(void)bark{
    NSLog(@"狗喊了一声,这条狗的颜色是:%d,性别是:%d,最高时速是%d,体重为%.2f",_color,_sex,_speed,_weight);
}
-(BOOL)isCompareColorWithOther:(Dog *)dog{
    if (_color == dog->_color) {//判断当前的狗狗颜色与穿进来的这个狗对象的颜色是否相同
        return YES;
    }else{
        return NO;
    }
}
-(float)CompareWeightWithOther:(Dog *)dog{
    if (_weight>=dog->_weight) {
        return _weight-dog->_weight;
    }else{
        return dog->_weight-_weight;
    }
}
@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Dog *d1=[Dog new];
        d1->_color=kColorBlack;
        d1->_sex=kSexYao;
        d1->_speed=90;
        d1->_weight=80.0;
        [d1 eat:@"一块沾有粑粑的粑粑"];
        [d1 run];//调用无参方法
        [d1 bark];
        Dog *d2=[Dog new];
        d2->_color=kColorWhite;
        d2->_sex=kSexYao;
        d2->_speed=60;
        d2->_weight=180.0;
        BOOL isSameColor=[d1 isCompareColorWithOther:d2];//注意判断的方法调用的时候如果需要返回值是需要定义一个BOOL变量的!!!(相当于定义同时赋给方法的返回值!)
        NSLog(@"isSameColor =%d",isSameColor);
        float WeightChazhi=[d1 CompareWeightWithOther:d2];
                NSLog(@"WeightChazhi =%.2f",WeightChazhi);
        }
    return 0;
}
下面是通过这次训练得出的总结:
通过这个练习可以学习到对象是可以作为参数在方法中传递的,当使用传入的对象中的某个属性的时候,我们需要使用例如本题dog->_color来获取里面的值!

2 个回复

倒序浏览
看起来挺逗的,但是很经典的一个例子!
回复 使用道具 举报
冲头像进来回复的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马