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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 TTsu 于 2015-9-11 23:20 编辑
  1. //
  2. //  main.m
  3. //  结构体实例变量test
  4. //
  5. //  Created by imac on 15/9/11.
  6. //  Copyright (c) 2015年 itcast. All rights reserved.
  7. //

  8. #import <Foundation/Foundation.h>
  9. typedef struct {int speed;float weight;}myDog;

  10. #pragma mark 狗的声明
  11. @interface Dog : NSObject

  12. {
  13.    
  14.     int _size;
  15.     myDog _basicQualities;
  16.     NSString *_name;
  17. }
  18. -(void)setSize:(int)size;   //设置狗大小
  19. -(void)DisSize;             //展示狗大小
  20. -(void)setName:(NSString *)name;//更改狗名字
  21. -(void)setBasicQualities:(int) iSpeed:andiWeight:(float)iweight;//展示狗的所有属性
  22. -(void)DisbasicQualities;//展示狗的所有属性
  23. @end

  24. #pragma mark 狗的实现
  25. @implementation Dog
  26. -(void)setSize:(int)size{   //设置狗大小
  27.     if (0==size)
  28.         size = 5;
  29.     _size = size;
  30. }
  31. -(void)DisSize{            //展示狗大小
  32.     NSLog(@"这狗是%d 尺",_size);
  33. }
  34. -(void)setName:(NSString *)name{//更改狗名字
  35.     _name = name;
  36. }

  37. -(void)setBasicQualities:(int) iSpeed andiWeight:(float)iweight{
  38.     _basicQualities.speed = iSpeed;
  39.     _basicQualities.weight = iweight;

  40. }
  41. -(void)DisbasicQualities{//展示狗的所有属性
  42.     NSLog(@"速度是%d,体重是%.2f",_basicQualities.speed,_basicQualities.weight);
  43. }

  44. @end
  45. int main(int argc, const char * argv[]) {
  46.     @autoreleasepool {
  47.         //≥myDog DogV = {20,20.6f};
  48.         Dog *haveDog = [Dog new];
  49.         [haveDog setSize:4];
  50.         [haveDog DisSize];
  51.         [haveDog setName:@"旺财"];
  52.         //[haveDog setBasicQualities:DogV];
  53.         [haveDog setBasicQualities:20 andiWeight:30.0f];
  54.         [haveDog DisbasicQualities];
  55.     }
  56.     return 0;
  57. }
复制代码

目前只能用这种方法写,我的-(void)setBasicQualities:(int) iSpeed:andiWeight:(float)iweight; 形参我只能写的了是(int) iSpeed:andiWeight:(float)iweight;
我用结构体做形参提示我用_bridge 又是什么意思?
如下:-(void)setBasicQualities:(Dog *)dog{
    _basicQualities = *(_bridge myDog*)dog;   //什么意思 何解?
还有我在没有@public下就非得用结构体做实参传到我的DOG类下究竟能不能修改我的myDog _basicQualities 这个实例变量 的speed 和 weight数值呢?

11 个回复

正序浏览
TTsu 发表于 2015-9-12 22:59
看到你这个代码我真的费解啊
haveDog.basicQualities = &DogV;,希望能得到你的分析....
对象后面还接.的 ...
  1. haveDog.basicQualities = &DogV
复制代码

将结构体首地址传递个_basicQualities结构体变量指针
回复 使用道具 举报
真心费劲,
回复 使用道具 举报
TTsu 中级黑马 2015-9-12 22:59:58
10#

看到你这个代码我真的费解啊
haveDog.basicQualities = &DogV;,希望能得到你的分析....
对象后面还接.的操作写法跟结构体相似不敢乱揣摩什么意思.....
我想的重新在主函数里面写个新结构体做实参传输这里与你一样,这是我新的代码
  1. //
  2. //  main.m
  3. //  结构体实例变量test
  4. //
  5. //  Created by imac on 15/9/11.
  6. //  Copyright (c) 2015年 itcast. All rights reserved.
  7. //

  8. #import <Foundation/Foundation.h>
  9. typedef struct {int speed;float weight;}myDog;

  10. #pragma mark 狗的声明
  11. @interface Dog : NSObject

  12. {
  13.    
  14.     int _size;
  15.     myDog _basicQualities;
  16.     NSString *_name;
  17. }
  18. -(void)setSize:(int)size;   //设置狗大小
  19. -(void)DisSize;             //展示狗大小
  20. -(void)setName:(NSString *)name;//更改狗名字
  21. -(void)setBasicQualities:(myDog)basicQualities; //狗的所有属性
  22. -(void)DisbasicQualities;//展示狗的所有属性
  23. //-(myDog)basicQualities;
  24. @end

  25. #pragma mark 狗的实现
  26. @implementation Dog
  27. -(void)setSize:(int)size{   //设置狗大小
  28.     if (0==size)
  29.         size = 5;
  30.     _size = size;
  31. }
  32. -(void)DisSize{            //展示狗大小
  33.     NSLog(@"这狗是%d 尺",_size);
  34. }
  35. -(void)setName:(NSString *)name{//更改狗名字
  36.     _name = name;
  37. }

  38. -(void)setBasicQualities:(myDog)basicQualities{
  39.     _basicQualities = basicQualities;
  40.    
  41. }
  42. //-(myDog)basicQualities
  43. //{
  44. //    return _basicQualities;
  45. //}
  46. -(void)DisbasicQualities{//展示狗的所有属性
  47.     NSLog(@"\n%d英尺的%@开始准备跑了",_size,_name);
  48.     NSLog(@"\n速度是%d,体重是%.2f",_basicQualities.speed,_basicQualities.weight);
  49. }

  50. @end
  51. int main(int argc, const char * argv[]) {
  52.     @autoreleasepool {
  53.         //≥myDog DogV = {20,20.6f};
  54.         Dog *haveDog = [Dog new];
  55.         myDog a = {50,50.0f};
  56.         [haveDog setBasicQualities:a];
  57.         
  58.         NSLog(@"狗的速度为:%d,重量为:%.2f",a.speed,a.weight);
  59.         [haveDog setSize:4];
  60.         [haveDog DisSize];
  61.         [haveDog setName:@"旺财"];
  62.         //[haveDog setBasicQualities:DogV];
  63.         //[haveDog setBasicQualities:20 andiWeight:30.0f];
  64.         [haveDog DisbasicQualities];
  65.     }
  66.     return 0;
  67. }
复制代码
回复 使用道具 举报
毛强 中级黑马 2015-9-12 22:31:58
9#
  1. //
  2. //  main.m
  3. //  结构体实例变量test
  4. //
  5. //  Created by imac on 15/9/11.
  6. //  Copyright (c) 2015年 itcast. All rights reserved.
  7. //

  8. #import <Foundation/Foundation.h>
  9. typedef struct {int speed;float weight;}myDog;

  10. #pragma mark 狗的声明
  11. @interface Dog : NSObject

  12. {
  13.    
  14.     int _size;
  15.     myDog *_basicQualities;
  16.     NSString *_name;
  17. }
  18. -(void)setBasicQualities:(myDog *)dog;
  19. -(myDog *)basicQualities;


  20. -(void)setSize:(int)size;   //设置狗大小
  21. -(void)DisSize;             //展示狗大小
  22. -(void)setName:(NSString *)name;//更改狗名字
  23. -(void)setBasicQualities:(int) iSpeed:andiWeight:(float)iweight;//展示狗的所有属性
  24. -(void)DisbasicQualities;//展示狗的所有属性
  25. @end

  26. #pragma mark 狗的实现
  27. @implementation Dog
  28. -(void)setSize:(int)size{   //设置狗大小
  29.     if (0==size)
  30.         size = 5;
  31.     _size = size;
  32. }
  33. -(void)DisSize{            //展示狗大小
  34.     NSLog(@"这狗是%d 尺",_size);
  35. }
  36. -(void)setName:(NSString *)name{//更改狗名字
  37.     _name = name;
  38. }
  39. -(void)setBasicQualities:(myDog *)dog{
  40.     _basicQualities = dog;
  41. }
  42. -(myDog *)basicQualities
  43. {
  44.     return _basicQualities;
  45. }

  46. -(void)setBasicQualities:(int) iSpeed andiWeight:(float)iweight{
  47.     _basicQualities->speed = iSpeed;
  48.     _basicQualities->weight = iweight;
  49.    
  50. }
  51. -(void)DisbasicQualities{//展示狗的所有属性
  52.     NSLog(@"速度是%d,体重是%.2f",_basicQualities->speed,_basicQualities->weight);
  53. }

  54. @end
  55. int main(int argc, const char * argv[]) {
  56.     @autoreleasepool {
  57.         myDog DogV = {20,20.6f};
  58.         Dog *haveDog = [Dog new];
  59.         haveDog.basicQualities = &DogV;
  60.         
  61.         [haveDog setSize:4];
  62.         [haveDog DisSize];
  63.         [haveDog setName:@"旺财"];
  64.       //  [haveDog setBasicQualities:20 andiWeight:30.0f];
  65.         [haveDog DisbasicQualities];
  66.     }
  67.     return 0;
  68. }
复制代码


完整的代码
回复 使用道具 举报
毛强 中级黑马 2015-9-12 22:19:56
8#
  1. -(void)setBasicQualities:(myDog )dog{
  2.     _basicQualities = dog;
  3. }
复制代码


看看这段代码
回复 使用道具 举报
这个我没有看懂问题...你用结构体做形参...这个真没有研究过...
回复 使用道具 举报

回帖奖励 +1

卧槽,大神门已经开始看get和set了,我还在写许三多,fighting+++++
回复 使用道具 举报

回帖奖励 +1

没用provide封装
回复 使用道具 举报

回帖奖励 +1

真真真真好
回复 使用道具 举报
caiyao 来自手机 中级黑马 2015-9-11 23:43:14
藤椅

回帖奖励 +1

我看到你并没有用provide封装呀
回复 使用道具 举报
bowenfei 来自手机 中级黑马 2015-9-11 23:29:46
沙发

回帖奖励 +1

渣渣刚看到递归函数。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马