黑马程序员技术交流社区
标题:
两个知识点 蒙圈了 求大神指点 急急急
[打印本页]
作者:
卡哇伊
时间:
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根据位置不同有两种含义:
int a = p.age; // [p age];这样表示get方法 第二行那里不知是不是你写错
p.age = 10;// [p setAge:10]; 这是set方法
复制代码
2>你举例的题目是不是这样,建议把代码全贴出来
- (void)setAge:(int)age
{
/* _age = age; 这里既然已经注释掉了,那就表示调用set函数时没有进行操作 ,_age还是原来的值,没有写get方法,正常情况下get返回的也是_age的值,我跟你理解都一样*/
}
复制代码
作者:
-(_)-
时间:
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