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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 傘が咲く 高级黑马   /  2014-5-12 19:53  /  1877 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

记录下今天学的东西,激励自己前进!{:3_63:}

定义了两个类,Point2D类 和 Circle 类,其中 Circle类中属性包含 Point2D类,各个文件单独编译,统一链接。

Point2D.h文件:(Point2D类的声明)
  1. #import <Foundation/Foundation.h>

  2. @interface Point2D : NSObject
  3. {
  4.     int _x;
  5.     int _y;
  6. }

  7. //_x的setter和getter
  8. - (void)setX:(int)x;
  9. - (int)x;

  10. //同时设置_x 和 _y
  11. - (void)setX:(int)x andY:(int)y;

  12. //_y的setter和getter
  13. - (void)setY:(int)y;
  14. - (int)y;

  15. //两点之间距离的方法
  16. + (double)distanceBetweenPoint1:(Point2D *)p1 andPoint2:(Point2D *)p2;
  17. - (double)distanceWithOther:(Point2D *)p;
  18. @end
复制代码

Point2D.m (Point2D类的实现)
  1. #import "Point2D.h"
  2. #import <math.h>

  3. @implementation Point2D
  4. //_x的setter和getter
  5. - (void)setX:(int)x
  6. {
  7.     _x = x;
  8. }
  9. - (int)x
  10. {
  11.     return _x;
  12. }
  13. //_y的setter和getter
  14. - (void)setY:(int)y
  15. {
  16.     _y = y;
  17. }
  18. - (int)y
  19. {
  20.     return _y;
  21. }
  22. //同时设置x和y的方法
  23. - (void)setX:(int)x andY:(int)y
  24. {
  25.     _x = x;
  26.     _y = y;
  27. }

  28. //两点之间的距离方法
  29. + (double)distanceBetweenPoint1:(Point2D *)p1 andPoint2:(Point2D *)p2
  30. {
  31.     int m = [p1 x] - [p2 x];
  32.     int n = [p1 y] - [p2 y];
  33.     double distance = sqrt(m*m + n*n);
  34.     return distance;
  35.    
  36. }
  37. //与其他点之间的距离
  38. - (double)distanceWithOther:(Point2D *)p
  39. {
  40.     return [Point2D distanceBetweenPoint1:self andPoint2:p];
  41. }

  42. @end
复制代码

Circle.h文件  (Circle 类的声明)
  1. #import <Foundation/Foundation.h>
  2. #import "Point2D.h"

  3. //定义一个圆类
  4. @interface Circle : NSObject
  5. {
  6.     Point2D *_circlePoint;        //圆心,Point2D对象
  7.     double _radius;               //半径
  8. }

  9. //_circlePoint的setter和getter
  10. - (void)setCirclePoint:(Point2D *)circlePoint;
  11. - (Point2D *)circlePoint;

  12. //radius的setter和getter方法
  13. - (void)setRadius:(double)radius;
  14. - (double)radius;

  15. //判断是否与其他圆相交的方法
  16. + (BOOL)isIntersectBetweenCircle1:(Circle *)c1 andCircle2:(Circle *)c2;
  17. - (BOOL)isIntersectWithOther:(Circle *)c1;
  18. @end
复制代码

Circle.m文件 (Circle类的实现)

  1. #import "Circle.h"
  2. #import "Point2D.h"


  3. @implementation Circle
  4. //_circlePoint的setter和getter
  5. - (void)setCirclePoint:(Point2D *)circlePoint
  6. {
  7.     _circlePoint = circlePoint;
  8. }
  9. - (Point2D *)circlePoint
  10. {
  11.     return _circlePoint;
  12. }

  13. //radius的setter和getter方法
  14. - (void)setRadius:(double)radius
  15. {
  16.     _radius = radius;
  17. }
  18. - (double)radius
  19. {
  20.     return _radius;
  21. }

  22. //判断两个圆是否相交
  23. + (BOOL)isIntersectBetweenCircle1:(Circle *)c1 andCircle2:(Circle *)c2
  24. {
  25.     return [c1 isIntersectWithOther:c2];
  26. }
  27. - (BOOL)isIntersectWithOther:(Circle *)c1
  28. {
  29.     //distance圆心距 小于 radiusSum半径和 则两圆相交
  30.     double distance = [Point2D distanceBetweenPoint1:[self circlePoint] andPoint2:[c1 circlePoint]];
  31.     double radiusSum = [self radius] + [c1 radius];
  32.     return distance < radiusSum;
  33. }

  34. @end
复制代码

main.m文件 (项目的入口)


  1. #import "Point2D.h"
  2. #import "Circle.h"

  3. int main()
  4. {
  5.     //定义一个圆c1 并设置其属性
  6.     Point2D *p1 = [Point2D new];
  7.     [p1 setX:10 andY:5];
  8.     Circle *c1 = [Circle new];
  9.     [c1 setRadius:2];
  10.     [c1 setCirclePoint:p1];
  11.    
  12.     //定义一个圆c2 并设置其属性
  13.     Point2D *p2 = [Point2D new];
  14.     [p2 setX:7 andY:9];
  15.     Circle *c2 = [Circle new];
  16.     [c2 setCirclePoint:p2];
  17.     [c2 setRadius:10];
  18.    
  19.     //调用 isIntersectWithOther方法 判断两圆是否相交
  20.     //返回值为 YES 证明两圆相交  返回值是 NO 则两圆不相交
  21.     BOOL flag = [c1 isIntersectWithOther:c2];
  22.     NSLog(@"%d",flag);
  23.     return 0;
  24. }
复制代码




1 个回复

倒序浏览

   所有文件都可以用 cc -c 命令单独编译生成 .o文件,最后用 cc main.o Point2D.o Circle.o -framework Foundation 命令链接,生成可执行文件a.out
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马