黑马程序员技术交流社区

标题: 两个知识点 蒙圈了 求大神指点 急急急 [打印本页]

作者: 卡哇伊    时间: 2014-8-12 01:15
标题: 两个知识点 蒙圈了 求大神指点 急急急
      学到点语法那有点蒙 话不多说 上例子:
    int a = p.age  // [p setAge] 等价于 没问题 ,调用p.age 访问 - (void)setAge
:(int)age; 没问题 。问题是调用的 age是不是成员变量里_age;
把代码补全这样:
- (void)setAge:(int)age
{
    _age = age;
}
从这里是不是可以看出 p.age 调用的age 不是成员变量而是不带减号的age.

请高手指点一下 ,我说的对不对啊。这相关到后面的一道大题。

举例:

@implementation Person
- (void)setAge:(int)age
{                               //这就是最蒙的地方,从头来说,主函数里p调用set
                               //方法,把age 赋值为5 为什么打印的结果 age =0
                               // _age = 0;
}

int main()
{
      Person *p = [Person new];
       p.age = 5;
NSLog(@"%d",p.age);

}     oc能自动补齐没有的 get方法 在get方法 返回_age.那为什么 _age 返回的结果还是
0,我的理解是set 方法的大括号中 因为是手动写的 没有在大括号里补齐参数,oc看有set
方法,它就不会管你里面有没有东西了,因此少了参数,把age=5 传到set方法中就没有转换了,也叫赋值那步骤了,所以set方法什么也没干 get方法没有值 给_age 所以返回值为0;


_ (void)setAge:(int)age
{
        _age = age;     如果把参数补齐,在把age=5,传进来,结果是不是get方法的返回值就是5了。   求高手 高手指点 我的理解 是否正确。
}

作者: 寇亮    时间: 2014-8-12 08:43
函数声明是怎么写的?
作者: x65396731    时间: 2014-8-12 08:58
因为是通过方法的调用来修改和访问成员变量的,如果按LZ的想法就变成了直接修改访问成员变量了,点语法中的age只是代表了函数的变量,然后再通过函数来访问修改成员变量,是封装的概念。LZ不要把二者放在一起想就能想通了。心中要有成员变量是protect的,如果再实在想不通就强记好了。
作者: Jr_711    时间: 2014-8-12 09:17
本帖最后由 Jr_711 于 2014-8-12 09:42 编辑

1.不好意思哥们儿,我建议你排排版,把代码写到代码框里,现在这样让人看着乱还看不懂


2.根据我的理解回答你想问的是问题:
     1>p.age根据位置不同有两种含义:
  1. int a = p.age; // [p age];这样表示get方法      第二行那里不知是不是你写错
  2. p.age = 10;//    [p setAge:10];  这是set方法
复制代码

     2>你举例的题目是不是这样,建议把代码全贴出来
  1. - (void)setAge:(int)age
  2. {
  3. /* _age = age; 这里既然已经注释掉了,那就表示调用set函数时没有进行操作 ,_age还是原来的值,没有写get方法,正常情况下get返回的也是_age的值,我跟你理解都一样*/
  4. }
复制代码








作者: -(_)-    时间: 2014-8-12 09:36
你的代码好难看, 建议你改一下弄好发上来吧, 感觉你好像对点语法还不是很了解.
作者: cjfire    时间: 2014-8-12 10:03
实在是太乱了,而且,我看,第二句就错了吧。p.age在等号的右边,明显是要给a变量赋值,怎么可能等价于【p setAge】 呢?
如果你觉得比较乱,你看看斯坦福大学IOS7公开课的第一节课,里面有一个学生提问了这个问题,老师也解答了。
还有,下次提问把格式整理清楚,方便别人就是方便你自己。
作者: 卡哇伊    时间: 2014-8-12 10:46
是写错 了  有赋值的是Set方法 昨天 弄得太晚 了,迷糊了 ,打字速度很快 就没有回去检查 抱歉了
作者: cjfire    时间: 2014-8-12 10:58
卡哇伊 发表于 2014-8-12 10:46
是写错 了  有赋值的是Set方法 昨天 弄得太晚 了,迷糊了 ,打字速度很快 就没有回去检查 抱歉了  ...

那就重新编辑一下吧。
作者: chengnuoaini030    时间: 2014-8-14 15:52
………………




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