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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© haha92210 中级黑马   /  2014-11-25 15:16  /  1047 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我是本想用类方法来设置作者   可是行不同,所以就用的对象方法做的,,可是 还是怎么改不对
蒙圈了      然后怎么输出呢?也是问题啊   我是需要在book类里面定义一个char的属性和int的属性来存放作者的姓名和年龄属性吗?
然后输出直接输出这两个属性就行  是这样吗   大神来帮忙啊  类方法这部分就是很蒙啊      万分感谢    希望能多说点关于类方法和对象方法使用调用         定有黑马币答谢

  1. #import <Foundation/Foundation.h>


  2. @interface Person : NSObject
  3. {
  4.     char *_pName;
  5.     int _pAge;
  6. }
  7. -(void)setPName:(char *)pname;
  8. -(char)pName;
  9. -(void)setPAge:(int)page;
  10. -(int)pAge;

  11. @end

  12. @implementation Person

  13. -(void)setPName:(char *)pname
  14. {
  15.     _pName = pname ;
  16. }
  17. -(char)name
  18. {
  19.     return *(_pName);
  20. }
  21. -(void)setAge:(int)page
  22. {
  23.     _pAge=page;
  24. }
  25. -(int)pAge
  26. {
  27.     return _pAge;
  28. }


  29. @end


  30. @interface Book : NSObject
  31. {
  32.     char *_name;
  33.     char *_chuBanShe;
  34.     Person *_zuoZhe;
  35.     char *_zuoZheName;
  36.     char *_zuoZheAge;
  37. }
  38. -(void)setName:(char *)name;
  39. -(char)name;
  40. -(void)setChuBanShe:(char *)chuBanShe;
  41. -(char)chuBanShe;
  42. +(void)setZuoZheName:(char *)zuoZheName WithAge:(int *)zuoZheAge;


  43. @end

  44. @implementation Book

  45. -(void)setName:(char *)name
  46. {
  47.     _name = name;
  48. }
  49. -(char)name
  50. {
  51.     return *(_name);
  52. }
  53. -(void)setChuBanShe:(char *)chuBanShe
  54. {
  55.     _chuBanShe = chuBanShe;
  56. }
  57. -(char)chuBanShe
  58. {
  59.     return *(_chuBanShe);
  60. }
  61. [color=Red]-(void)setZuoZheName:(char *)zuoZheName WithAge:(int)zuoZheAge
  62. {
  63.     _zuoZheName = [_zuoZhe setPName : zuoZheName];
  64.     _zuoZheAge = [_zuoZhe setPAge : zuoZheAge];
  65. }
  66. [/color]


  67. @end
复制代码

评分

参与人数 2黑马币 +21 收起 理由
Jr_711 + 20
星河鹭起 + 1

查看全部评分

12 个回复

倒序浏览
第10行  - (char *)pName;
第22行  - (char *)pName
            {
                  return _pName;
             }
//char和后面的*是一体的,你类似的错误很多,先改下试试


评分

参与人数 1黑马币 +1 收起 理由
haha92210 + 1 谢谢

查看全部评分

回复 使用道具 举报 1 0
Jr_711 发表于 2014-11-25 15:28
第10行  - (char *)pName;
第22行  - (char *)pName
            {

麻烦看一下  这是我刚刚修改过的 我发现我的作者属性就没存进去    你说的那几个问题 貌似没有影响结果


  1. #import <Foundation/Foundation.h>


  2. @interface Person : NSObject
  3. {
  4.     char *_pName;
  5.     int _pAge;
  6. }
  7. -(void)setPName:(char *)pname;
  8. -(char *)pName;
  9. -(void)setPAge:(int)page;
  10. -(int)pAge;

  11. @end

  12. @implementation Person

  13. -(void)setPName:(char *)pname
  14. {
  15.     _pName = pname ;
  16. }
  17. -(char *)pName
  18. {
  19.     return (_pName);
  20. }
  21. -(void)setPAge:(int)page
  22. {
  23.     _pAge=page;
  24. }
  25. -(int)pAge
  26. {
  27.     return _pAge;
  28. }


  29. @end


  30. @interface Book : NSObject
  31. {
  32.     char *_name;
  33.     char *_chuBanShe;
  34.     Person *_zuoZhe;
  35.     char *_zuoZheName;
  36.     int _zuoZheAge;
  37. }
  38. -(void)setName:(char *)name;
  39. -(char *)name;
  40. -(void)setChuBanShe:(char *)chuBanShe;
  41. -(char)chuBanShe;
  42. -(void)setZuoZheName:(char *)zuoZheName WithAge:(int)zuoZheAge;


  43. @end

  44. @implementation Book

  45. -(void)setName:(char *)name
  46. {
  47.     _name = name;
  48. }
  49. -(char *)name
  50. {
  51.     return (_name);
  52. }
  53. -(void)setChuBanShe:(char *)chuBanShe
  54. {
  55.     _chuBanShe = chuBanShe;
  56. }
  57. -(char)chuBanShe
  58. {
  59.     return *(_chuBanShe);
  60. }
  61. -(void)setZuoZheName:(char *)zuoZheName WithAge:(int)zuoZheAge
  62. {
  63.    
  64.     [_zuoZhe setPName : zuoZheName];
  65.     [_zuoZhe setPAge: zuoZheAge];
  66. }



  67. @end



  68. int main(int argc, const char * argv[]) {
  69.     @autoreleasepool {
  70.         Book *b = [Book new];
  71.         Person *p = [Person new];
  72.         b.name = "book";
  73.         b.chuBanShe = "chubanshe";
  74.         [b setZuoZheName:"sda" WithAge:11];
  75.    
  76. //       NSLog(@"%c   %d",b->_zuoZhe.pName,b->_zuoZhe.pAge);
  77.         
  78.      }
  79.     return 0;
  80. }
复制代码
回复 使用道具 举报
本帖最后由 Jr_711 于 2014-11-25 16:39 编辑

你对照下,看能看懂吗 ——————拿记事本写的,感觉应该没错
  1. #import <Foundation/Foundation.h>

  2. //Person类
  3. @interface Person : NSObject

  4. {
  5.         char *_name;
  6.         int _age;
  7. }

  8. - (void)setName:(char *)name;
  9. - (char *)name;

  10. - (void)setAge:(int)age;
  11. - (int)age;
  12. @end

  13. @implementation Person
  14. - (void)setName:(char *)name
  15. {
  16.         _name = name;
  17. }
  18. - (char *)name
  19. {
  20.         return _name;
  21. }

  22. - (void)setAge:(int)age
  23. {
  24.         _age = age;
  25. }

  26. - (int)age
  27. {
  28.         return _age;
  29. }

  30. @end


  31. //Book类
  32. @interface Book : NSObject
  33. {

  34.   //这里是用Person类的_autuor,作者的名字 年龄的设置方法在person类中已经有了,不用再在Book类里写
  35.         Person *_author;
  36.         char *_bookName;
  37.         char *_publisher;

  38. }

  39. - (void)setBookName:(char *)bookName;
  40. - (char *)bookName;

  41. - (void)setPublisher:(char *)publisher;
  42. - (char *)publisher;

  43. @end

  44. @implementation Book

  45. - (void)setBookName:(char *)bookName
  46. {
  47.         _bookName = bookName;

  48. }
  49. - (char *)bookName
  50. {
  51.         return _bookName;
  52. }


  53. - (void)setPublisher:(char *)publisher
  54. {
  55.         _publisher = publisher;
  56. }
  57. - (char *)publisher;
  58. {
  59.         return _publisher;
  60. }

  61. @end


  62. int main()
  63. {
  64.         //先创建一个书类对象b
  65.         Book *b = [[Book alloc] init];
  66.         //再创建一个人类对象p,设置相应的值
  67.         Person *p = [[Person alloc] init];
  68.         p.name = "liming";
  69.         p.age = 33;
  70.         

  71.         //把p对象赋值给b中的author,就完成了设置作者的要求
  72.         b.author = p;
  73.         return 0;
  74. }


复制代码


评分

参与人数 1黑马币 +1 收起 理由
haha92210 + 1 我的分少 不过感谢帮忙

查看全部评分

回复 使用道具 举报
haha92210 发表于 2014-11-25 15:54
麻烦看一下  这是我刚刚修改过的 我发现我的作者属性就没存进去    你说的那几个问题 貌似没有影响结果

...

main 函数里,你要先把p赋值给b中的_zuoZhe,然后才能给_zuoZhe里的成员变量复制,

要不然 _zuoZhe相当是个空指针,Person *_zuoZhe;只是说明这个指针能指向对象类型,

你不给他赋值,他就没有指向person类对象,也就是个空指针,空指针里哪有成员变量让你设置呢?

回复 使用道具 举报
Jr_711 发表于 2014-11-25 16:20
你对照下,看能看懂吗 ——————拿记事本写的,感觉应该没错

懂了 是我这个思路就是行不通的吗?  我想在书类里面用一个对象方法来一起设置作者这个类,是不是不能实现啊?
回复 使用道具 举报
Jr_711 高级黑马 2014-11-25 21:03:36
7#
haha92210 发表于 2014-11-25 20:48
懂了 是我这个思路就是行不通的吗?  我想在书类里面用一个对象方法来一起设置作者这个类,是不是不能实 ...

-(void)setZuoZheName:(char *)zuoZheName WithAge:(int)zuoZheAge

这个方法吗?
能啊,给_zuoZhe赋值,应该就能调用你那个方法(只要没写错)
回复 使用道具 举报
Jr_711 高级黑马 2014-11-25 21:05:58
8#
送你点黑马币
回复 使用道具 举报
Jr_711 发表于 2014-11-25 21:03
-(void)setZuoZheNamechar *)zuoZheName WithAgeint)zuoZheAge

这个方法吗?

你的那串代码  我测试后 author没找到   然后我改成_author 后  他告诉我 说事例变量被保护  可是不能加public啊  我还是觉得应该加个对象方法 用来设置作者属性  不行了  我感觉好懵啊   最遥远的距离就是我知道怎么会是 可是写不出来啊
回复 使用道具 举报
Jr_711 高级黑马 2014-11-25 21:36:45
10#
haha92210 发表于 2014-11-25 21:26
你的那串代码  我测试后 author没找到   然后我改成_author 后  他告诉我 说事例变量被保护  可是不能加p ...

晕死  ,sorry

忘了写_author的setter和getter了,你应该会吧
回复 使用道具 举报
/Users/LilMing/Desktop/屏幕快照 2014-11-25 下午9.38.04.png
回复 使用道具 举报
Jr_711 发表于 2014-11-25 21:36
晕死  ,sorry

忘了写_author的setter和getter了,你应该会吧

懂了懂了懂了  哈哈  谢谢谢
回复 使用道具 举报
Jr_711 发表于 2014-11-25 21:36
晕死  ,sorry

忘了写_author的setter和getter了,你应该会吧

真的是最后一个问题了
  1. int main(int argc, const char * argv[]) {
  2.     @autoreleasepool {
  3.         Book *b = [Book new];
  4.         Person *p = [Person new];
  5.         b.name = "book";
  6.         b.chuBanShe = "chubanshe";
  7. //        [b setZuoZheName:"sda" WithAge:11];
  8.         
  9.         [b setZuoZhe:p];
  10.    
  11.        NSLog(@"%s   %d   ",[b zuoZhe].pName,[b zuoZhe].pAge);
复制代码



输出不了啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马