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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lewisen 中级黑马   /  2014-5-7 23:24  /  1295 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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呢?求两者区别,谢谢

3 个回复

倒序浏览
本帖最后由 葬花桥 于 2014-5-8 08:43 编辑

咦,我不是回答过这个问题么?
指针p是在main函数是定义的,作用域只在main函数内部,不可能在方法中使用p的,即使你在类中再定义一个指针p,这两个p也不是同一个。
还有p-> age   是访问p指向的对象的age成员,你方法中都没有实例化对象,如何能用这种写法,不知道楼主学的哪门语言可以这样写,反正C++也没这样写
回复 使用道具 举报
p->是指向对象的  指针是指向方法的
回复 使用道具 举报
  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
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马