A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Lxy 中级黑马   /  2014-10-18 17:53  /  1376 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
//----------------------------------------

2.设计2个类,类之间的关系自拟(比如继承、组合)
1> 身材数据
(1)属性
* 身高
* 体重
* 手长
* 脚长

(2)方法
* 属性相应的set和get方法

2> 人
(1)属性
* 年龄
* 身高
* 体重
* 手长
* 脚长

(2)方法
* 属性相应的set和get方法
*/
#import <Foundation/Foundation.h>
@interface Body : NSObject
{
    double _height;
    double _weight;
    double _hands;
    double _foots;
}
- (void)setHeight:(double)height;
- (double)height;
- (void)setWeight:(double)Weight;
- (double)weight;
- (void)setHands:(double)hands;
- (double)hands;
- (void)setFoots:(double)foots;
- (double)foots;
@end
@implementation Body
- (void)setHeight:(double)height
{
    self->_height = height;
}
- (double)height
{
    return self->_height;
}
- (void)setWeight:(double)weight
{
    self->_weight = weight;
}
- (double)weight
{
   return self->_weight;
}
- (void)setHands:(double)hands
{
    self->_hands = hands;
}
- (double)hands
{
    return self->_hands;
}
- (void)setFoots:(double)foots
{
    self->_foots = foots;
}
- (double)foots
{
    return self->_foots;
}
@end

@interface Person : NSObject
{
    int _age;
    Body * _body;
}
- (void)setAge:(int)age;
- (int)age;
- (void)setBodyofHeight:(double)height ofWeight:(double)weight ofHands:(double)hands ofFoots:(double)foots;
- (Body *)body ;
@end
@implementation Person
- (void)setAge:(int)age
{
    self->_age = age;
}
- (int)age
{
    return self->_age;
}
- (void)setBodyofHeight:(double)height ofWeight:(double)weight ofHands:(double)hands ofFoots:(double)foots
{

    //_body = [body setHeight:height];
    [self->_body setHeight:height];
    [self->_body setWeight:weight];
    [self->_body setHands:hands];
    [self->_body setFoots:foots];
}
- (Body *)body
{
    return self->_body;
}
@end
int main()
{
    Person * p = [Person new];


    [p setBodyofHeight:173.5 ofWeight:58.0 ofHands:13.2 ofFoots:14.3];
   
    Body * b = [p body];
    NSLog(@"b->_height=%f,b->_weight=%f,b->_hands=%f,b->_foots=%f",[b height],[b weight], [b hands], [b foots]);

    return 0;
}
b->_height=0.000000,b->_weight=0.000000,b->_hands=0.000000,b->_foots=0.000000


为毛输出结果都为0!

评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

6 个回复

倒序浏览
Lxy 中级黑马 2014-10-18 17:55:20
沙发
求大师指点!!
回复 使用道具 举报
你Person类里的属性_body这个对象在你创建Person对象的时候_body里面的值是空的,即nil。
之后你再_body的set方法里用[self->_body setHeight:height];,这是没有意义的。相当于[nil setHeight:height];
你应该在_body的set方法里先创建一个Body对象,再把对象赋给_body。
代码如下:
  1. - (void)setBodyofHeight:(double)height ofWeight:(double)weight ofHands:(double)hands ofFoots:(double)foots
  2. {
  3.     Body *b = [Body new];
  4.     [b setHeight:height];
  5.     [b setWeight:weight];
  6.     [b setHands:hands];
  7.     [b setFoots:foots];
  8.     self->_body = b;
  9. }
复制代码
回复 使用道具 举报
Lxy 中级黑马 2014-10-19 00:54:27
板凳
弹琴骚年 发表于 2014-10-18 22:26
你Person类里的属性_body这个对象在你创建Person对象的时候_body里面的值是空的,即nil。
之后你再_body的s ...

嗯,已经解决了!方法的架构不好,要加个形参(Body *)body
回复 使用道具 举报
加油ahhhhhhhhhhhhh……
回复 使用道具 举报
Lxy 中级黑马 2014-10-19 15:57:45
地板
上面代码的写法,还是没有转到面向对象,set设置方法形参应该只设置,要调用该方法的对象的属性,即可!用到的各个类对象,在主函数main中创建并初始化,而不是全部集中在一个方法中,就像上面的
- (void)setBodyofHeight:(double)height ofWeight:(double)weight ofHands:(double)hands ofFoots:(double)foots
{

    //_body = [body setHeight:height];
    [self->_body setHeight:height];
    [self->_body setWeight:weight];
    [self->_body setHands:hands];
    [self->_body setFoots:foots];
}
应该是
- (void)setBodyofHeight:(Body*)body
{
    _body = body;
}
回复 使用道具 举报
duzhong 中级黑马 2014-10-19 22:08:21
7#
好长的一串代码,可惜没装苹果系统,运行不了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马