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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 山涧小草 于 2015-7-9 21:59 编辑
  1. /*
  2. 6.设计一个类Circle,用来表示二维平面中的圆
  3. 1> 属性
  4. * double _radius (半径)
  5. * Point2D *_point (圆心)

  6. 2> 方法
  7. * 属性相应的set和get方法
  8. * 设计一个对象判断跟其他圆是否重叠(重叠返回YES,否则返回NO)
  9. * 设计一个类方法判断两个圆是否重叠(重叠返回YES,否则返回NO)
  10. */

  11. #import<Foundation/Foundation.h>

  12. #import<math.h>

  13. @interface Pointer2D:NSObject
  14. {
  15.     double _x;  // x的值。
  16.    
  17.     double _y;  // y的值。
  18. }

  19. // x的setter和setter。
  20. - (void)setX:(double)newX;
  21. - (double)x;

  22. // y的setter和getter。
  23. - (void)setY:(double)newY;
  24. - (double)y;

  25. // 对象方法同时设置x和y的声明。
  26. - (void)setX:(double)x andY:(double)y;

  27. // 对象方法计算跟其他点的距离的声明。
  28. - (double)distanceWithOtherPointer:(Pointer2D *)p;

  29. // 类方法计算两点的距离的声明。
  30. + (double)distanceOfPointer1:(Pointer2D *)p1 andPointer2:(Pointer2D *)p2;

  31. @end

  32. @implementation Pointer2D

  33. // x的setter和getter。
  34. - (void)setX:(double)newX
  35. {
  36.     _x = newX;
  37. }

  38. - (double)x
  39. {
  40.     return _x;
  41. }

  42. // y的setter和getter。
  43. - (void)setY:(double)newY
  44. {
  45.     _y = newY;
  46. }

  47. - (double)y
  48. {
  49.     return _y;
  50. }

  51. // 对象方法同时设置x和y的实现。
  52. - (void)setX:(double)x andY:(double)y
  53. {
  54.     [self setX:x];
  55.    
  56.     [self setY:y];
  57. }

  58. // 对象方法计算跟其他点的距离的实现。
  59. - (double)distanceWithOtherPointer:(Pointer2D *)p
  60. {
  61.     return [Pointer2D distanceOfPointer1:self andPointer2:p];
  62. }

  63. // 类方法计算两点的距离的实现。
  64. + (double)distanceOfPointer1:(Pointer2D *)p1 andPointer2:(Pointer2D *)p2
  65. {
  66.     double xDist = [p1 x] - [p2 x];

  67.     double yDist = [p1 y] - [p2 y];
  68.    
  69.     double p1p2Dist = sqrt(pow(xDist ,2) + pow(yDist,2));
  70.    
  71.     return p1p2Dist;   
  72. }

  73. @end

  74. /********* Circle ***********/
  75. @interface Circle:NSObject
  76. {
  77.     double _radius;     // 半径。
  78.    
  79.     Pointer2D *_point;    // 圆心。
  80. }

  81. // _radius的setter和getter。
  82. - (void)setRadius:(double)newRadius;
  83. - (double)radius;

  84. // _pointer的setter和getter。
  85. - (void)setPoint:(Pointer2D *)newPoint;
  86. - (Pointer2D *)point;

  87. // 计算两圆心之间的距离。 注意BOOL类型,方法名一般以is开头。
  88. - (BOOL)relationshipWitchOtherCircle1:(Circle *)c;

  89. + (BOOL)relationshipOfCircle1:(Circle *)c1 andCircle2:(Circle *)c2;

  90. @end

  91. @implementation Circle

  92. // _radius的setter和getter。
  93. - (void)setRadius:(double)newRadius
  94. {
  95.     _radius = newRadius;
  96. }
  97. - (double)radius
  98. {
  99.     return _radius;
  100. }

  101. // _Point的setter和getter。
  102. - (void)setPoint:(Pointer2D *)newPoint
  103. {
  104.     _point = newPoint;
  105. }
  106. - (Pointer2D *)point
  107. {
  108.     return _point;
  109. }

  110. // 判断两圆的关系。
  111. - (BOOL)relationshipWitchOtherCircle1:(Circle *)c
  112. {
  113.     return [Circle relationshipOfCircle1:self andCircle2:c];
  114. }

  115. + (BOOL)relationshipOfCircle1:(Circle *)c1 andCircle2:(Circle *)c2
  116. {
  117.     Pointer2D *p1 = [c1 point];
  118.    
  119.     Pointer2D *p2 = [c2 point];
  120.    
  121.     double pointDistance = [p1 distanceWithOtherPointer:p2];    //如果类方法调用了,类名用Point2D还是Circle?
  122.    
  123.     double radiusDistance = [c1 radius] + [c2 radius];
  124.    
  125.     if(pointDistance <= radiusDistance)
  126.         
  127.         return YES;
  128.    
  129.     else
  130.         
  131.         return NO;
  132.    
  133.     // return pointDistance <= radiusDistance;      // 可以这样简化代码。
  134. }
  135. @end

  136. int main()
  137. {
  138.     // 创建Circle1的半径和圆心。
  139.     Circle *c1 = [Circle new];
  140.    
  141.     Pointer2D *p1 = [Pointer2D new];    // 必须先创建圆心对象再调用!!即注意成员变量在创建前的空值现象。
  142.    
  143.     [c1 setRadius:3];
  144.    
  145.     [p1 setX:3 andY:4];
  146.    
  147.     [c1 setPoint:p1]
  148.    
  149.     // 创建Circle的半径和圆心。
  150.     Circle *c2 = [Circle new];
  151.    
  152.     Pointer2D *p2 = [Pointer2D new];
  153.    
  154.     [c2 setRadius:3];
  155.    
  156.     [p2 setX:7 andY:9];
  157.    
  158.     [c2 setPoint:p2];
  159.    
  160.     BOOL b = [Circle relationshipOfCircle1:c1 andCircle2:c2];
  161.    
  162.     NSLog(@"%d",b);
  163.    
  164.     return 0;
  165. }
复制代码

2 个回复

倒序浏览
圆心的类名 你新建的圆心类名是 Pointer2D
  你下面圆拥有圆心的时候 写的代码是 Point2D *_point
回复 使用道具 举报
OUT___Man 发表于 2015-7-9 08:43
圆心的类名 你新建的圆心类名是 Pointer2D
  你下面圆拥有圆心的时候 写的代码是 Point2D *_point ...

是的,太粗心了!谢过啦!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马