黑马程序员技术交流社区
标题:
编译有很多错误,哪位高手能看看问题在哪!!
[打印本页]
作者:
山涧小草
时间:
2015-7-9 01:40
标题:
编译有很多错误,哪位高手能看看问题在哪!!
本帖最后由 山涧小草 于 2015-7-9 21:59 编辑
/*
6.设计一个类Circle,用来表示二维平面中的圆
1> 属性
* double _radius (半径)
* Point2D *_point (圆心)
2> 方法
* 属性相应的set和get方法
* 设计一个对象判断跟其他圆是否重叠(重叠返回YES,否则返回NO)
* 设计一个类方法判断两个圆是否重叠(重叠返回YES,否则返回NO)
*/
#import<Foundation/Foundation.h>
#import<math.h>
@interface Pointer2D:NSObject
{
double _x; // x的值。
double _y; // y的值。
}
// x的setter和setter。
- (void)setX:(double)newX;
- (double)x;
// y的setter和getter。
- (void)setY:(double)newY;
- (double)y;
// 对象方法同时设置x和y的声明。
- (void)setX:(double)x andY:(double)y;
// 对象方法计算跟其他点的距离的声明。
- (double)distanceWithOtherPointer:(Pointer2D *)p;
// 类方法计算两点的距离的声明。
+ (double)distanceOfPointer1:(Pointer2D *)p1 andPointer2:(Pointer2D *)p2;
@end
@implementation Pointer2D
// x的setter和getter。
- (void)setX:(double)newX
{
_x = newX;
}
- (double)x
{
return _x;
}
// y的setter和getter。
- (void)setY:(double)newY
{
_y = newY;
}
- (double)y
{
return _y;
}
// 对象方法同时设置x和y的实现。
- (void)setX:(double)x andY:(double)y
{
[self setX:x];
[self setY:y];
}
// 对象方法计算跟其他点的距离的实现。
- (double)distanceWithOtherPointer:(Pointer2D *)p
{
return [Pointer2D distanceOfPointer1:self andPointer2:p];
}
// 类方法计算两点的距离的实现。
+ (double)distanceOfPointer1:(Pointer2D *)p1 andPointer2:(Pointer2D *)p2
{
double xDist = [p1 x] - [p2 x];
double yDist = [p1 y] - [p2 y];
double p1p2Dist = sqrt(pow(xDist ,2) + pow(yDist,2));
return p1p2Dist;
}
@end
/********* Circle ***********/
@interface Circle:NSObject
{
double _radius; // 半径。
Pointer2D *_point; // 圆心。
}
// _radius的setter和getter。
- (void)setRadius:(double)newRadius;
- (double)radius;
// _pointer的setter和getter。
- (void)setPoint:(Pointer2D *)newPoint;
- (Pointer2D *)point;
// 计算两圆心之间的距离。 注意BOOL类型,方法名一般以is开头。
- (BOOL)relationshipWitchOtherCircle1:(Circle *)c;
+ (BOOL)relationshipOfCircle1:(Circle *)c1 andCircle2:(Circle *)c2;
@end
@implementation Circle
// _radius的setter和getter。
- (void)setRadius:(double)newRadius
{
_radius = newRadius;
}
- (double)radius
{
return _radius;
}
// _Point的setter和getter。
- (void)setPoint:(Pointer2D *)newPoint
{
_point = newPoint;
}
- (Pointer2D *)point
{
return _point;
}
// 判断两圆的关系。
- (BOOL)relationshipWitchOtherCircle1:(Circle *)c
{
return [Circle relationshipOfCircle1:self andCircle2:c];
}
+ (BOOL)relationshipOfCircle1:(Circle *)c1 andCircle2:(Circle *)c2
{
Pointer2D *p1 = [c1 point];
Pointer2D *p2 = [c2 point];
double pointDistance = [p1 distanceWithOtherPointer:p2]; //如果类方法调用了,类名用Point2D还是Circle?
double radiusDistance = [c1 radius] + [c2 radius];
if(pointDistance <= radiusDistance)
return YES;
else
return NO;
// return pointDistance <= radiusDistance; // 可以这样简化代码。
}
@end
int main()
{
// 创建Circle1的半径和圆心。
Circle *c1 = [Circle new];
Pointer2D *p1 = [Pointer2D new]; // 必须先创建圆心对象再调用!!即注意成员变量在创建前的空值现象。
[c1 setRadius:3];
[p1 setX:3 andY:4];
[c1 setPoint:p1]
// 创建Circle的半径和圆心。
Circle *c2 = [Circle new];
Pointer2D *p2 = [Pointer2D new];
[c2 setRadius:3];
[p2 setX:7 andY:9];
[c2 setPoint:p2];
BOOL b = [Circle relationshipOfCircle1:c1 andCircle2:c2];
NSLog(@"%d",b);
return 0;
}
复制代码
作者:
OUT___Man
时间:
2015-7-9 08:43
圆心的类名 你新建的圆心类名是 Pointer2D
你下面圆拥有圆心的时候 写的代码是 Point2D *_point
作者:
山涧小草
时间:
2015-7-9 21:46
OUT___Man 发表于 2015-7-9 08:43
圆心的类名 你新建的圆心类名是 Pointer2D
你下面圆拥有圆心的时候 写的代码是 Point2D *_point ...
是的,太粗心了!谢过啦!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2