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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 ‍___________H 于 2014-9-15 10:10 编辑
  1. #import <Foundation/Foundation.h>
  2. #import <math.h>
  3. //*******圆心的类**********
  4. @interface Point2D : NSObject

  5. {
  6.     double _x;
  7.     double _y;
  8.    
  9. }

  10. - (void)setX:(double)x;
  11. - (double)x; // 圆心x的get方法和set方法声明
  12. - (void)setY:(double)y;
  13. - (double)y; // 圆心y的get方法和set方法声明
  14. - (void)setX:(double)x andY:(double)y; // 同时设置X和Y
  15. - (double)longWithOtherPoint:(Point2D *)Other;
  16. // 对象方法计算这个点和其他点之间的距离。

  17. + (double)longBetweenPoint1:(Point2D*)p1 Point2:(Point2D*)p2;
  18. // 类方法计算两点之间的距离。

  19. @end

  20. @implementation Point2D

  21. - (void)setX:(double)x
  22. {
  23.     _x = x;
  24.    
  25. }

  26. - (double)x
  27. {
  28.     return _x;
  29. }

  30. - (void)setY:(double)y
  31. {
  32.     _y = y;
  33. }

  34. - (double)y
  35. {
  36.     return _y;
  37. }

  38. - (void)setX:(double)x andY:(double)y
  39. {
  40.     [self setX:(double)x];
  41.     [self setY:(double)y];
  42. }

  43. - (double)longWithOtherPoint:(Point2D *)Other
  44. {
  45.     double xCha = _x - Other->_x; // 2个X的差
  46.     double yCha = _y - Other->_y; // 2个y的差
  47.     double x2 = pow(xCha,2); // X 差得平方
  48.     double y2 = pow(yCha,2); // y 差得平方
  49.     double d = sqrt(x2 + y2);
  50.     return d;
  51. }

  52. + (double)longBetweenPoint1:(Point2D*)p1 Point2:(Point2D*)p2
  53. {
  54.     return [p1 longWithOtherPoint:p2];
  55. }

  56. @end


  57. // **************** 圆的类 ********************

  58. @interface Circle : NSObject
  59. {
  60.     double _radius; // 半径
  61.     Point2D *_point; // 圆心
  62. }

  63. - (void)setRadius:(double)radius;
  64. - (double)radius;
  65. - (void)setPoint:(Point2D *)point;
  66. - (Point2D *)point;
  67. - (BOOL)SFCDWithOtherCircle:(Circle *)Other; //对象方法,判断这个圆和另一个是否重叠。

  68. + (BOOL)SFCDBetweenCircle1:(Circle *)c1 andCircle2:(Circle *)c2; // 类方法 判断2个圆是否重叠。


  69. @end

  70. @implementation Circle

  71. - (void)setRadius:(double)radius
  72. {
  73.     _radius = radius;
  74. }
  75. - (double)radius
  76. {
  77.     return _radius;
  78. }
  79. - (void)setPoint:(Point2D *)point
  80. {
  81.     _point = point;
  82.    
  83. }
  84. - (Point2D *)point
  85. {
  86.     return _point;
  87. }
  88. //对象方法,这个圆和另一个是否重叠。
  89. - (BOOL)SFCDWithOtherCircle:(Circle *)Other
  90. {
  91.     Point2D *p1 = [self point]; // get这个圆的原点
  92.     Point2D *p2 = [Other point]; // get 另一个圆的原点
  93.    
  94.     double i = [Point2D longBetweenPoint1:p1 Point2:p2] - ([self radius] + [Other radius]); //调用原点间距离类方法 - 调用get2个圆半径的和
  95.     if (i >= 0)
  96.     {
  97.         return YES;
  98.    
  99.     }else return NO;
  100. }

  101. + (BOOL)SFCDBetweenCircle1:(Circle *)c1 andCircle2:(Circle *)c2
  102. {
  103.     return [c1 SFCDWithOtherCircle:c2]; // 只要用C1去调用是否重叠的对象方法即可。
  104. }


  105. @end

  106. int main()
  107. {
  108.     Point2D *pp1 = [Point2D new];
  109.     [pp1 setX:10 andY:13];
  110.    
  111.     Point2D *pp2 = [Point2D new];
  112.     [pp2 setX:7 andY:9];
  113.    
  114.     Circle *cc1 = [Circle new];
  115.     [cc1 setRadius:1];
  116.     [cc1 setPoint:pp1];
  117.    
  118.     Circle *cc2 = [Circle new];
  119.     [cc2 setRadius:3];
  120.     [cc2 setPoint:pp2];
  121.    
  122.     if ([cc1 SFCDWithOtherCircle:cc2])
  123.     {
  124.         NSLog(@"NO");
  125.     }else NSLog(@"YES");
  126.    
  127.     // NSLog(@"%hhd",[cc1 SFCDWithOtherCircle:cc2]);
  128.    
  129.    
  130.    
  131. }
复制代码
哥哥们  帮我看看。+ (BOOL)SFCDBetweenCircle1:(Circle *)c1 andCircle2:(Circle *)c2  这行老是报错

E5A67455-81F2-4EDC-B316-759250D71C9B.png (196.74 KB, 下载次数: 41)

E5A67455-81F2-4EDC-B316-759250D71C9B.png

11 个回复

倒序浏览
+ (BOOL)是什么,类方法前面定义时不得都是减号吗?
回复 使用道具 举报
陨石 发表于 2014-9-15 10:01
+ (BOOL)是什么,类方法前面定义时不得都是减号吗?

哥哥  对象方法 用-号哦
回复 使用道具 举报
嗯,我的意思就是类里面的方法。
回复 使用道具 举报
陨石 发表于 2014-9-15 10:12
嗯,我的意思就是类里面的方法。

你应该视频还没看到类方法吧,+ 开头的时类方法,用类名来调用。- 开头是对象方法  ,调用者是对象
回复 使用道具 举报
噢,还没看到那。。。静态和动态。。?
回复 使用道具 举报
Jr_711 高级黑马 2014-9-15 10:46:17
7#
86行 BOOL的前括号貌似是中文的,你改下试试
回复 使用道具 举报
Jr_711 发表于 2014-9-15 10:46
86行 BOOL的前括号貌似是中文的,你改下试试

恩  括号写错了。。。。。太粗心了:'(
回复 使用道具 举报
{:3_54:}顶一个
回复 使用道具 举报
其实仔细看一下报错提示,两个error都在括号哪里进行了标注,试一下是不是括号的问题就马上可以解决了,希望LZ下周报错时认真研究报错的提示,哪怕英语看不懂去百度也要搞明白,积累多了,看见相似的报错自然而然的就知道错误原因。
回复 使用道具 举报
scllyw 发表于 2014-9-15 12:20
其实仔细看一下报错提示,两个error都在括号哪里进行了标注,试一下是不是括号的问题就马上可以解决了,希 ...

受教了~~~~~
回复 使用道具 举报
视频里源程序
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马