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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wehuazi 中级黑马   /  2014-10-20 15:44  /  1811 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 wehuazi 于 2014-10-20 17:30 编辑
  1. //人
  2. @interface Person : NSObject
  3. {
  4.     NSString *_name; // 姓名
  5.     int _age; // 年龄
  6. }

  7. // 姓名的getter和setter
  8. - (void)setName:(NSString *)name;
  9. - (NSString *)name;

  10. // 年龄的getter和setter
  11. - (void)setAge:(int)age;
  12. - (int)age;

  13. // 同时设置姓名和年龄
  14. - (void)setName:(NSString *)name andAge:(int)age;

  15. @end

  16. @implementation Person

  17. // 姓名的getter和setter
  18. - (void)setName:(NSString *)name
  19. {
  20.     _name = name;
  21. }
  22. - (NSString *)name
  23. {
  24.     return _name;
  25. }

  26. // 年龄的getter和setter
  27. - (void)setAge:(int)age
  28. {
  29.     _age = age;
  30. }
  31. - (int)age
  32. {
  33.     return _age;
  34. }

  35. // 同时设置姓名和年龄
  36. - (void)setName:(NSString *)name andAge:(int)age
  37. {
  38.     _name = name;
  39.     _age = age;
  40.     /*
  41.     [self setName:name];
  42.     [self setAge:age];
  43.      */
  44. }
  45. @end

  46. // 书
  47. @interface Book : NSObject
  48. {
  49.     NSString *_name; // 书名
  50.     NSString *_publisher; // 出版社名称
  51.     Person *_author; // 作者
  52. }
  53. // 书名的getter和setter
  54. - (void)setName:(NSString *)name;
  55. - (NSString *)name;

  56. // 出版社名称的getter和setter
  57. - (void)setPublisher:(NSString *)publisher;
  58. - (NSString *)publisher;

  59. // 作者的getter和setter
  60. - (void)setAuthor:(Person *)author;
  61. - (Person *)author;
  62. @end

  63. @implementation Book
  64. // 书名的getter和setter
  65. - (void)setName:(NSString *)name
  66. {
  67.     _name = name;
  68. }
  69. - (NSString *)name
  70. {
  71.     return _name;
  72. }

  73. // 出版社名称的getter和setter
  74. - (void)setPublisher:(NSString *)publisher
  75. {
  76.     _publisher = publisher;
  77. }
  78. - (NSString *)publisher
  79. {
  80.     return _publisher;
  81. }

  82. // 作者的getter和setter
  83. - (void)setAuthor:(Person *)author
  84. {
  85.     _author = author;
  86. }
  87. - (Person *)author
  88. {
  89.     return _author;
  90. }
  91. @end
  92. int main(int argc, const char * argv[])
  93. {

  94.     Person *p = [Person new];
  95.     [p setName:@"人名" setAge:20];
  96.     NSLog(@"name=%@ --- age=%d\n",[p name], [p age]);
  97.    
  98.     Book *b = [Book new];
  99.     [b setBookname:@"bookname"];
  100.     [b setAuthor: p];
  101.     NSLog(@"bookname=%@ -- author=%@",[b bookname],[b author]);//问题代码
  102.     return 0;
  103. }
复制代码
为什么问题代码一行不能输出结果,程序无法正常结束。
bookname也无法单独输出结果,author能这样赋值吗?author能这样输出吗?
为什么输出结果是author=<Person: 0x100202f10>,怎么能让输出author的name和age
求大神帮忙解决,谢谢了!

评分

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

查看全部评分

10 个回复

倒序浏览
  1. int main(int argc, const char * argv[])
  2. {
  3.    
  4.     Person *p = [Person new];
  5.     [p setName:@"人名" andAge:20]; //同时设置人名和年龄
  6.     NSLog(@"name=%@ --- age=%d\n",[p name], [p age]);
  7.    
  8.     Book *b = [Book new];
  9.     [b setName:@"bookname"]; //设置书名
  10.     [b setAuthor: p];
  11.     NSLog(@"bookname=%@ -- author=%@",[b name],[b author]);//细心点儿,你在main里写的方法名跟类的声明和实现中的方法名都不一样。
  12.     return 0;
  13. }
复制代码



加油
回复 使用道具 举报

为什么输出结果是author=<Person: 0x100202f10>,怎么能让输出author的name和age
回复 使用道具 举报
wehuazi 发表于 2014-10-20 17:07
为什么输出结果是author=,怎么能让输出author的name和age

重写author的description方法,返回一个NSString字符串
回复 使用道具 举报
ssssssssssssssssssssssss
回复 使用道具 举报
重写Person的description方法,因为默认的%@打印对象打的是地址
回复 使用道具 举报
wehuazi 中级黑马 2014-10-21 10:17:51
7#
coyote 发表于 2014-10-20 22:14
重写Person的description方法,因为默认的%@打印对象打的是地址

怎么重写?大神能给个详细的解决方案吗?谢谢了
回复 使用道具 举报
wehuazi 中级黑马 2014-10-21 10:20:42
8#
崔石炫 发表于 2014-10-20 19:52
重写author的description方法,返回一个NSString字符串

怎么重写?能详细点吗?谢谢了
回复 使用道具 举报
wehuazi 发表于 2014-10-21 10:20
怎么重写?能详细点吗?谢谢了
  1. //author的对象方法:
  2. - (NSString *)description
  3. {
  4.     return [NSString stringWithFormat:@"name = %@ , age = %d" , _name , _age];
  5. }
复制代码
回复 使用道具 举报
ench44 中级黑马 2014-10-21 12:00:53
10#
同学,这么写会不会有内存侧漏啊....你new了两个都个没释放... 也没有@autoreleasepool
回复 使用道具 举报
coyote 中级黑马 2014-10-21 13:26:23
11#
wehuazi 发表于 2014-10-21 10:17
怎么重写?大神能给个详细的解决方案吗?谢谢了

楼下已经写了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马