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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我的问题是:为什么最后的[st study]打印的结果是null,我还找不到原因,请大神帮助
  1. /*
  2. 3.设计3个类,类之间的关系自拟(比如继承、组合)
  3. 1> 人
  4. (1)属性
  5. * 姓名
  6. * 年龄

  7. (2)方法
  8. * 属性相应的set和get方法
  9. * 设计一个对象方法同时设置姓名和年龄

  10. 2> 书
  11. (1)属性
  12. * 书名
  13. * 出版社名称
  14. * 作者(包含姓名和年龄)

  15. (2)方法
  16. * 属性相应的set和get方法

  17. 3> 学生
  18. * 姓名
  19. * 年龄
  20. * 学号
  21. * 书(随身带着一本书)

  22. 2> 方法
  23. * 属性相应的set和get方法
  24. * 设计一个对象方法-study:输出书名

  25. */
  26. #import<Foundation/Foundation.h>

  27. @interface Person : NSObject
  28. {
  29.     NSString *_name;  // 姓名
  30.     int _age;         // 年龄
  31. }

  32. // 声明姓名的setter 和getter 方法

  33. - (void)setName: (NSString *)name;
  34. - (NSString *)name;


  35. // 声明年龄的setter 和 getter 方法
  36. - (void)setAge: (int)age;
  37. - (int)age;

  38. // 同时设置姓名和年龄的setter 方法
  39. - (void)setName: (NSString *)name andAge: (int)age;

  40. @end


  41. @implementation Person


  42. // 实现姓名的setter 和getter 方法
  43. - (void)setName: (NSString *)name
  44. {
  45.     _name = name;
  46. }
  47. - (NSString *)name
  48. {
  49.     return _name;
  50. }

  51. // 实现年龄的setter 和 getter 方法
  52. - (void)setAge: (int)age
  53. {
  54.     _age = age;
  55. }
  56. - (int)age
  57. {
  58.     return _age;
  59. }

  60. // 实现设置姓名和年龄的setter 方法
  61. - (void)setName: (NSString *)name andAge: (int)age
  62. {
  63.     [self setName:name];
  64.     [self setAge:age];
  65. }

  66. @end


  67. @interface Book : NSObject    // Book 类的声明
  68. {
  69.     NSString *_bookname;      // 书名
  70.     NSString *_chubanshename; // 出版社名
  71.     Person *_editor;          // 作者
  72. }

  73. // 声明书名的setter 和 getter
  74. - (void)setBookName: (NSString *)bookname;
  75. - (NSString *)bookname;

  76. // 声明出版社名的setter 和 getter 方法
  77. - (void)setChuBanSheName: (NSString *)chubanshename;
  78. - (NSString *)chubanshename;

  79. // 声明作者的setter 和 getter 方法
  80. - (void)setEditor: (Person *)editor;
  81. - (Person *)editor;

  82. @end

  83. @implementation Book   // Book 类的实现

  84. // 实现书名的setter 和 getter 方法
  85. - (void)setBookName: (NSString *)bookname
  86. {
  87.     _bookname = bookname;
  88. }
  89. - (NSString *)bookname
  90. {
  91.     return _bookname;
  92. }

  93. // 实现出版社名的setter 和 getter 方法
  94. - (void)setChuBanSheName: (NSString *)chubanshename
  95. {
  96.     _chubanshename = chubanshename;
  97. }
  98. - (NSString *)chubanshename
  99. {
  100.     return _chubanshename;
  101. }

  102. // 实现作者的setter 和  getter 方法
  103. - (void)setEditor: (Person *)editor  // 传入的参数是Person类
  104. {
  105.     _editor = editor;
  106. }
  107. - (Person *)editor
  108. {
  109.     return _editor;
  110. }


  111. @end



  112. @interface Student : Person   // Person类声明
  113. {
  114.     NSString *_schoolnumber;  // 学号
  115.     Book *_book;              // Person 和 Book 是组合关系,Person拥有Book
  116. }

  117. // 声明学号的setter 和 getter 方法
  118. - (void)setSchoolNumber: (NSString *)schoolnumber;
  119. - (NSString *)schoolnumber;

  120. // 声明书的setter 和 getter 方法
  121. - (void)setBook: (Book *)book;
  122. - (Book *)book;

  123. // 声明一个学习方法
  124. - (void)study;

  125. @end

  126. @implementation Student

  127. // 实现学号的setter 和 getter 方法
  128. - (void)setSchoolNumber: (NSString *)schoolnumber
  129. {
  130.     _schoolnumber = schoolnumber;
  131. }
  132. - (NSString *)schoolnumber
  133. {
  134.     return _schoolnumber;
  135. }

  136. // 实现书本的setter 和 getter 方法
  137. - (void)setBook: (Book *)book
  138. {
  139.     _book = book;
  140. }
  141. - (Book *)book
  142. {
  143.     return _book;
  144. }


  145. // 实现学习的方法
  146. - (void)study
  147. {
  148.     NSLog(@"书名是:%@",[_book bookname]);
  149. }

  150. @end


  151. int main()
  152. {
  153.    
  154.     Person *p = [Person new];         // 创建一个Person对象
  155.     [p setName: @"黄焕恩" andAge: 27]; // 给P所指向的对象发送一条set方法
  156.     NSLog(@"名字是:%@ ,年龄是:%d",[p name],[p age]);
  157.    
  158.     Book *bk = [Book new];
  159.     [bk setBookName: @"青年文摘"];
  160.     [bk setChuBanSheName: @"广西师范大学出版社"];
  161.     NSLog(@"书名是:%@,出版社是:%@",[bk bookname],[bk chubanshename]);
  162.    
  163.     Student *st = [Student new];
  164.     [st study];
  165.    
  166.     return 0;
  167. }






复制代码

5 个回复

倒序浏览
楼主没有给Student的实例对象st一本书,所以就是空,应该先给学生对象一本书,main方法代码如下
  1. int main(int argc, const char * argv[]) {
  2.     @autoreleasepool {
  3.         
  4.         Person *p = [Person new];         // 创建一个Person对象
  5.         [p setName: @"黄焕恩" andAge: 27]; // 给P所指向的对象发送一条set方法
  6.         NSLog(@"名字是:%@ ,年龄是:%d",[p name],[p age]);
  7.         
  8.         Book *bk = [Book new];
  9.         [bk setBookName: @"青年文摘"];
  10.         [bk setChuBanSheName: @"广西师范大学出版社"];
  11.         NSLog(@"书名是:%@,出版社是:%@",[bk bookname],[bk chubanshename]);
  12.         
  13.         Student *st = [Student new];
  14.         //给学生一本书
  15.         st.book=bk;
  16.         [st study];
  17.     return 0;
  18.     }
  19. }
复制代码
回复 使用道具 举报
susie_cc 发表于 2015-12-31 09:56
楼主没有给Student的实例对象st一本书,所以就是空,应该先给学生对象一本书,main方法代码如下
...

哈哈,后来发现了问题所在!谢谢了哈
回复 使用道具 举报
加油哦。。。。。。。。。。。。。。。。。。。。。
回复 使用道具 举报
yolande 来自手机 中级黑马 2015-12-31 12:39:29
报纸
楼上说的
回复 使用道具 举报
HHE_johnson 发表于 2015-12-31 12:01
哈哈,后来发现了问题所在!谢谢了哈

客气
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马