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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王海江1 中级黑马   /  2014-6-26 21:36  /  1241 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在类方法中是否可以调用对象方法?

4 个回复

倒序浏览
类方法中可以调用对象方法。
如:
类方法中传入对象参数,在类方法实现中可以调用该对象的对象方法,这样调用这个类方法时造成的影响对象也是该对象。

参考题目:


  1. /*************************************
  2. 1. 设计一个类Point2D,用来表示二维平面中某个点
  3.   1> 属性
  4.     * double x
  5.     * double y

  6.   2> 方法
  7.     * 属性相应的set和get方法
  8.     * 设计一个对象方法同时设置x和y
  9.     * 设计一个对象方法计算跟其他点的距离
  10.     * 设计一个类方法计算两个点之间的距离

  11.   3> 提示
  12.     C语言 math.h里面
  13.     double pow(double n,double m)  :计算n的m次方
  14.     double sqrt(double n)          :计算根号N的值

  15. *************************************/

  16. /*************************************
  17. 设计一个类Circle,用来表示二维平面中的圆
  18. 1> 属性
  19.     * double _radius (半径)
  20.     * Point2D *_point (圆心)
  21. 2> 方法
  22.     * 属性相应的set方法跟get方法
  23.     * 设计一个对象方法判断跟其他圆是否重叠(重叠返回yes,否则返回no)
  24.     * 设计一个类方法判断两个圆是否重叠(重叠返回yes,否则返回No)
  25. *************************************/


  26. #import <Foundation/Foundation.h>
  27. #import <math.h>

  28. @interface Point2D : NSObject
  29. {
  30.     double _x;
  31.     double _y;
  32. }

  33. - (void)SetPoint2DX : (double)x andY : (double)y;
  34. - (double)GetPointY;
  35. - (double)GetPointX;
  36. - (double)CountMyPointWithOtherPoint : (Point2D *) otherPoint;
  37. + (double)CountDistancePoint1 : (Point2D *)point1 WithPoint2 : (Point2D *)point2;

  38. @end


  39. @interface Circle : NSObject
  40. {
  41.     double _radius;         //半径
  42.     Point2D *_point;        //圆心
  43. }

  44. - (void)SetRadius : (double)radius ;
  45. - (void)SetPoint : (Point2D *) point ;
  46. - (double)GetRadius;
  47. - (Point2D *)GetPoint;
  48. - (BOOL)JudgeSelfWithOtherCircle : (Circle *)circle ;
  49. + (BOOL)JudgeCircle : (Circle *)circle1 WithOtherCircle : (Circle *) circle2 ;

  50. @end


  51. @implementation Point2D
  52. - (void)SetPoint2DX : (double)x andY : (double)y
  53. {
  54.     _x = x;
  55.     _y = y;
  56.    
  57.     return;
  58. }
  59. - (double)GetPointY
  60. {
  61.     return _y;
  62. }
  63. - (double)GetPointX
  64. {
  65.     return _x;
  66. }
  67. - (double)CountMyPointWithOtherPoint : (Point2D *) otherPoint
  68. {

  69.    return [Point2D CountDistancePoint1 : self WithPoint2 : otherPoint];
  70.    
  71. }
  72. + (double)CountDistancePoint1 : (Point2D *)point1 WithPoint2 : (Point2D *)point2
  73. {
  74.     double x_length,y_length,pTop_length;
  75.    
  76.     //x_length = point1->_x - point2->_x;
  77.     x_length = [point1 GetPointX] - [point2 GetPointX];
  78.     //y_length = point1->_y - point2->_y;
  79.     y_length = [point1 GetPointY] - [point2 GetPointY];
  80.    
  81.     pTop_length = sqrt((pow(x_length,2) + pow(y_length,2)));
  82.    
  83.     //return [point1 CountMyPointWithOtherPoint:point2];
  84.     return pTop_length;
  85. }

  86. @end

  87. @implementation Circle
  88. - (void)SetRadius : (double)radius
  89. {
  90.     if(radius > 0)
  91.         self->_radius = radius;
  92.     else
  93.         NSLog(@"SET ERROR!!!");

  94.     return;
  95. }
  96. - (void)SetPoint : (Point2D *) point
  97. {
  98.     _point = point;
  99.     return;
  100. }
  101. - (double)GetRadius
  102. {
  103.     return self->_radius ;
  104. }
  105. - (Point2D *)GetPoint
  106. {

  107.     return self->_point;
  108. }

  109. - (BOOL)JudgeSelfWithOtherCircle : (Circle *)circle
  110. {
  111.    
  112.     return [Circle JudgeCircle : self WithOtherCircle : circle];
  113. }
  114. + (BOOL)JudgeCircle : (Circle *)circle1 WithOtherCircle : (Circle *) circle2
  115. {
  116.     Point2D *p1 = [circle1 GetPoint];
  117.     Point2D *p2 = [circle2 GetPoint];
  118.    
  119.     double length_p1Top2 = [Point2D CountDistancePoint1 : p1 WithPoint2 : p2];
  120.    
  121.     if(length_p1Top2 >= ([circle1 GetRadius] + [circle2 GetRadius]))
  122.         return NO;
  123.     else
  124.         return YES;
  125.    
  126.     return 0;
  127. }

  128. @end


  129. int main()
  130. {
  131.     Circle *p_Circle1 = [Circle new];
  132.     Circle *p_Circle2 = [Circle new];
  133.    
  134.     [p_Circle1 SetRadius:5];
  135.     [p_Circle2 SetRadius:6];
  136.    
  137.     NSLog(@"圆一的半径为:%.2f",[p_Circle1 GetRadius]);
  138.     NSLog(@"圆二的半径为:%.2f",[p_Circle2 GetRadius]);
  139.    
  140.     Point2D *p_point1 = [Point2D new];
  141.     Point2D *p_point2 = [Point2D new];
  142.    
  143.     [p_point1 SetPoint2DX : 3 andY : 0];
  144.     [p_point2 SetPoint2DX : 3 andY : 4];

  145.     [p_Circle1 SetPoint:p_point1];
  146.     [p_Circle2 SetPoint:p_point2];
  147.    
  148.     NSLog(@"圆一跟圆二重叠的情况是:%d",[Circle JudgeCircle : p_Circle1 WithOtherCircle : p_Circle2]);
  149.    
  150. //    Point2D *p_Point1 ;
  151. //    Point2D *p_Point2 ;
  152. //
  153. //    p_Point1 = [Point2D new];
  154. //    p_Point2 = [Point2D new];
  155. //   
  156. //    [p_Point1 SetPoint2DX : 0 andY : 0];
  157. //    [p_Point2 SetPoint2DX : 3 andY : 4];
  158. //   
  159. //    NSLog(@"点一到点二的距离为:%.2f",[Point2D CountDistancePoint1 : p_Point1 WithPoint2 : p_Point2]);
  160.    
  161.     return 0;
  162. }
复制代码
回复 使用道具 举报
默认情况下,类方法中不能调用对象方法吧!对象方法中可以调用类方法!
回复 使用道具 举报
诸葛佰通 发表于 2014-6-26 22:02
类方法中可以调用对象方法。
如:
类方法中传入对象参数,在类方法实现中可以调用该对象的对象方法,这样调 ...

这个,我非常想知道你是怎么吧代码格式加进去的,感觉挺有意思的,初到论坛,菜鸟一枚,能说说么?
回复 使用道具 举报
骑着飞机去看海 发表于 2014-6-26 23:52
这个,我非常想知道你是怎么吧代码格式加进去的,感觉挺有意思的,初到论坛,菜鸟一枚,能说说么? ...

回复的地方点一下 《》 这个键。然后把代码粘贴进去就可以了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马