/*
设计一个”狗“类
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来获取里面的值! |
|