黑马程序员技术交流社区

标题: oc 类属性这里为何是这样? [打印本页]

作者: lewisen    时间: 2014-5-7 23:24
标题: oc 类属性这里为何是这样?
  1. #import <Foundation/Foundation.h>
  2. @interface Person : NSObject
  3. {
  4.     @public
  5.     int age;
  6.     double weight;
  7. }

  8. -(void)walk;
  9. @end


  10. @implementation Person
  11. -(void)walk
  12. {
  13.     NSLog(@"年龄是%d、体重是%.2f的人在散步。",age,weight);   //为什么不是p-〉age
  14. }
  15. @end

  16. int main()
  17. {
  18.     Person *p = [Person new];
  19.     p->age = 30;
  20.     p->weight =70;
  21.     [p walk];
  22.     return 0;
  23. }
复制代码


如上所示,在方法中的两个属性变量为什么不是p->age 和 p->weight,而是不加p呢?求两者区别,谢谢
作者: 葬花桥    时间: 2014-5-8 08:39
本帖最后由 葬花桥 于 2014-5-8 08:43 编辑

咦,我不是回答过这个问题么?
指针p是在main函数是定义的,作用域只在main函数内部,不可能在方法中使用p的,即使你在类中再定义一个指针p,这两个p也不是同一个。
还有p-> age   是访问p指向的对象的age成员,你方法中都没有实例化对象,如何能用这种写法,不知道楼主学的哪门语言可以这样写,反正C++也没这样写
作者: UT丶    时间: 2014-5-8 12:36
p->是指向对象的  指针是指向方法的
作者: NenKeer    时间: 2014-5-8 12:42
  1. @implementation Person
  2. -(void)walk
  3. {
  4.     NSLog(@"年龄是%d、体重是%.2f的人在散步。",age,weight);   //为什么不是p-〉age
  5.     //因为在类的实现中,是可以直接访问类的成员变量的,也就是说p调用了这个方法,里面的age和weight就是p对象的.
  6.     //而写成p->age的话,因为这个方法里面没有定义p,所以编译会出错。
  7. }
  8. @end
复制代码





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