黑马程序员技术交流社区

标题: 对象方法的学习知识总结(二) [打印本页]

作者: Fighting--BJ    时间: 2015-6-29 01:02
标题: 对象方法的学习知识总结(二)
对象方法的学习知识总结(二)






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;}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2