两个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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。