码迷,mamicode.com
首页 > 其他好文 > 详细

OC类与对象实例化,类之间的方法调用小题目

时间:2015-07-28 10:44:28      阅读:323      评论:0      收藏:0      [点我收藏+]

标签:objective-c   对象实例化   类之间的方法调用   

两个OC类与对象实例化题目

要求:
* 类名、属性名、属性类型、方法名、方法参数、方法返回值自拟
* 自己写main函数测试设计是否合理

/*

1.设计一个”狗“类
1> 属性
* 颜色
* 速度(单位是m/s)
* 性别
* 体重(单位是kg)

2> 行为
* 吃:每吃一次,体重增加0.5kg,输出吃完后的体重
* 吠(叫):输出所有的属性
* 跑:每跑一次,体重减少0.5kg,输出速度和跑完后的体重
* 比较颜色:跟别的狗比较颜色,如果一样,返回YES,不一样,返回NO
* 比较速度:跟别的狗比较速度,返回速度差(自己的速度 - 其他狗的速度)
*/

/*
#import <Foundation/Foundation.h>
typedef enum {yellow,black,red,green}dColor;
typedef enum {公,母}dSex;
@interface Dog : NSObject
{
    @public
    dColor _color;
    int _speed;
    dSex _sex;
    float _weight;
}

-(void)eat:(float)weight;
-(void)wangwang;
-(void)run:(float)weight;
-(BOOL)abccolor:(dColor)color1 andColor:(dColor)color2;
-(int)abcspeed:(int)speed1 andSpeed:(int)speed2;

@end

@implementation Dog

-(void)eat:(float)weight
{
    weight+=0.5;
    NSLog(@"weight changes:%.2f",weight);
}

-(void)wangwang
{
    NSLog(@"color:%d,speed:%d,sex:%d,weight:%.2f",_color,_speed,_sex,_weight);
}

-(void)run:(float)weight
{
    weight=weight-0.5;
    NSLog(@"weight changes:%.2f",weight);
}

-(BOOL)abccolor:(dColor)color1 andColor:(dColor)color2
{
    if(color1==color2)
        return YES;
    else
        return NO;
}

-(int)abcspeed:(int)speed1 andSpeed:(int)speed2
{
    int speed12=speed1-speed2;
    return speed12;
}

@end

int main()
{
    @autoreleasepool {
        Dog *dog1=[Dog new];
        dog1->_color=red;
        dog1->_sex=公;
        dog1->_speed=50;
        dog1->_weight=8.5;
        
        Dog *dog2=[Dog new];
        dog2->_color=yellow;
        dog2->_sex=母;
        dog2->_speed=30;
        dog2->_weight=6.5;
        
        [dog1 eat:dog1->_weight];
        [dog1 wangwang];
        [dog1 run:dog1->_weight];
        BOOL abc1=[dog1 abccolor:dog1->_color andColor:dog2->_color];
        int abc2=[dog1 abcspeed:dog1->_speed andSpeed:dog2->_speed];
        NSLog(@"颜色一样吗?答:%d",abc1);
        NSLog(@"速度差是:%d",abc2);
    }
    return 0;
}
*/

/*
2.结合前面的“狗”类,设计一个“人”类
1> 属性
* 姓名
* 狗(养了一条狗)

2> 行为
* 喂狗:每喂一次,狗就会执行“吃”这个行为
* 遛狗:每溜一次,狗就会执行“跑”这个行为
*/


#import <Foundation/Foundation.h>
typedef enum {yellow,black,red,green}dColor;
typedef enum {公,母}dSex;

//Dog 类
@interface Dog : NSObject
{
@public
    dColor _color;
    int _speed;
    dSex _sex;
    float _weight;
}
//Dog 的类方法(行为)声明
-(void)eat:(float)weight;
-(void)wangwang;
-(void)run:(float)weight;
-(BOOL)abccolor:(dColor)color1 andColor:(dColor)color2;
-(int)abcspeed:(int)speed1 andSpeed:(int)speed2;

@end

//Person 类
@interface Person : NSObject
{
    @public
    NSString *_name;
    Dog *_dog;  //这个属性定义为Dog类,是Dog类的一个实例对象,所以_dog可以调用Dog类中的方法
}
//Person 的类方法(行为)声明
-(void)weigou;
-(void)liugou;

@end

//Dog 类方法定义
@implementation Dog

-(void)eat:(float)weight
{
    weight+=0.5;
    NSLog(@"weight changes:%.2f",weight);
}

-(void)run:(float)weight
{
    weight=weight-0.5;
    NSLog(@"weight changes:%.2f",weight);
}

@end

//Person 类方法定义
@implementation Person

-(void)weigou{
    [_dog eat:_dog->_weight];  //在Person类里面的weigou和liugou方法中调用Dog类里面的eat和run方法,这里的调用方法的属性正好是Dog类的一个对象
}

-(void)liugou{
    [_dog run:_dog->_weight];  //同上
}

@end

int main()
{
    @autoreleasepool {
        Person *man1=[Person new];  //创建一个Person类的实例对象
        Dog *xiaobai=[Dog new];  //创建一个Dog类的对象,这个Dog类的实例对象正好就是我们创建的Person类实例对象的一个属性
        xiaobai->_weight=10;  //我们只需要xiaobai的_weight属性,所以只初始化这个属性就可以了
        man1->_dog=xiaobai;
        [man1 weigou];
        [man1 liugou];
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

OC类与对象实例化,类之间的方法调用小题目

标签:objective-c   对象实例化   类之间的方法调用   

原文地址:http://blog.csdn.net/felicity294250051/article/details/47101655

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!