对象方法的学习知识总结(二)
5.对象和对象方法之间的关系
(1)对象作为对象方法的参数
例:
假设有Person类:Person类有name、sex属性
假设实例化Person的对象
Person *p = [Person new]; p->name ="凤姐";
p->sex = "女";
............
-(void) displayPerson:(Person *)person{
NSLog("姓名:%@",person->name); NSLog("姓名:%@",person->sex);
}............
(2)对象作为对象方法的返回值
例:
-(Person*)changePerson:(Person*)person{
person->name=@"张三"; person->sex=@"男"; person->age = 28; return person; }
Person *P2 = [d changePerson:p1]; [d displayPerson:p2];
6.对象作为对象方法的参数---实际应用
/* 要求设计一个”狗“类 1> 属性 * 颜色 * 速度(单位是m/s) * 性别 * 体重(单位是kg) 2> 行为 * 吃:每吃一次,体重增加0.5kg,输出吃完后的体重 * 吠(叫):输出所有的属性 * 跑:每跑一次,体重减少0.5kg,输出速度和跑完后的体重 * 比较颜色:跟别的狗比较颜色,如果一样,两个值做减法得零,相同,YES,不等于0,颜色不相同,返回值NO * 比较速度:跟别的狗比较速度,返回速度差(自己的速度 - 其他狗的速度) */#import <Foundation/Foundation.h>#pragma mark 狗类的声明// Color 是 enum c 别名//定义颜色的枚举类型typedef enum c{kColorBlack,kColorWhite,kColorYellow,kColorTHJ} Color;//定义性别的枚举类型typedef enum s{kSexGong,kSexMu,kSexYao} Sex;@interface Dog : NSObject{ @public //颜色使用枚举 Color _color; //狗毛的颜色 int _speed; //狗的速度 Sex _sex; //狗的性别 float _weight; //狗的体重 }//-(void)eat;-(void)run;-(void)bark;//比较狗毛的颜色-(BOOL)compareColorWithOther:(Dog *) dog;//计算两条狗的速度差-(int)compareSpeedWithOther:(Dog *) dog;@end#pragma mark 狗类的实现@implementation Dog-(void)eat{ //每吃一次 +0.5 _weight += 0.5f; //吃东西,吃完以后,输出体重 NSLog(@"狗吃完后的体重是%.2f",_weight); }-(void)run{ //每跑一次 -0.5 _weight -= 0.5f; //输出速度和体重 NSLog(@"狗正在以%d的速度向前疯跑,体重是%.2f",_speed,_weight); }-(void)bark{ //输出各个属性 NSLog(@"颜色:%d,速度:%d,性别:%d,体重:%.2f",_color,_speed,_sex,_weight);}//比较狗毛的颜色-(BOOL)compareColorWithOther:(Dog *) dog{ //比较狗毛的颜色 //当前狗的颜色 _color 另外一条狗 dog->_color //相同 YES //不相同 NO if (_color == dog->_color) { return YES; }else{ return NO; }}//计算两条狗的速度差-(int)compareSpeedWithOther:(Dog *) dog{ //dog->_speed 另外一条狗的速度 return _speed - dog->_speed;}@endint main(int argc, const char * argv[]) { @autoreleasepool { //创建一个对象 Dog *d = [Dog new]; d -> _color = kColorTHJ; d -> _speed = 120; d -> _sex = kSexGong; d -> _weight = 60.45f; [d eat]; [d bark]; [d run]; //创建另外一条狗 Dog *other = [Dog new]; other -> _color = kColorTHJ; other -> _speed = 100; other -> _sex = kSexMu; other -> _weight = 40.45f; //比较两个狗的颜色 BOOL isSame = [d compareColorWithOther:other]; if (isSame) { NSLog(@"颜色相同"); }else{ NSLog(@"颜色不同"); } //比较速度 int s = [d compareSpeedWithOther:other]; NSLog(@"速度差:%d",s); } return 0;}
7.对象作为对象方法的返回值---实际应用
/** 综合示例(包含对象作为对象方法的参数和对象作为对象方法的返回值) */#import <Foundation/Foundation.h>//狗这个类的声明@interface Dog : NSObject{ @public int _speed; NSString *_name;}//显示狗的信息-(void)dispDog:(Dog *)dog;-(Dog *)changeSpeed:(Dog*)dog;@end//狗这个类的实现 @implementation Dog-(void)dispDog:(Dog *)dog{ NSLog(@"狗的名称:%@,速度:%d",dog->_name,dog->_speed);}-(Dog *)changeSpeed:(Dog*)dog{ //修改速度 dog -> _speed = 252; //byd speed 252 return dog; // byd}@endint main(int argc, const char * argv[]) { @autoreleasepool { //创建一个对象 Dog *d = [Dog new]; d->_speed = 100; d->_name = @"花花"; Dog *byd = [Dog new]; byd ->_name = @"大黄"; byd ->_speed = 250; //查看 byd 对象 的信息 [d dispDog:byd]; [byd dispDog:d]; //jd存储byd的地址,jd等同于byd Dog *jd = [d changeSpeed:byd]; [d dispDog:jd]; [d dispDog:byd]; } return 0;}
|
|