【原】---黑马程序员OC之综合小练习

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

/*

设计一个类Point2D,表示二维平面中的某个点

1> 属性

* double _x

* double _y

2> 方法

* 属性相应的set、get方法

* 设计一个对象方法同时设置x和y

* 设计一个对象方法计算跟其他点的距离

* 设计一个类方法计算两个点之间的距离

*/

#import <Foundation/Foundation.h>

#import <math.h>

//  点

@interface Point2D : NSObject

{

double _x;

double _y;

}

- (void)setX:(double)x;

- (double)x;

- (void)setY:(double)y;

- (double)y;

// 同时设置x和y

- (void)setX:(double)x andY:(double)y;

// 设计一个对象方法计算跟其他点的距离

- (double)distanceWithOther:(Point2D *)other;

// 设计一个类方法计算两个点之间的距离

+ (double)distanceBetweenPoint1:(Point2D *)p1 andPoint2:(Point2D *)p2;

@end

@implementation Point2D

- (void)setX:(double)x

{

_x = x;

}

- (double)x

{

return _x;

}

- (void)setY:(double)y

{

_y = y;

}

- (double)y

{

return _y;

}

// 同时设置x和y

- (void)setX:(double)x andY:(double)y

{

/*

_x = x;

_y = y;

*/

/*

self->_x = x;

self->_y = y;

*/

// 推荐做法

[self setX:x];

[self setY:y];

/*

获取成员变量_x的3种方式

_x;   // 直接访问

self->_x;   // 利用self直接访问

[self x];    // 调用getter,最好的方式

*/

}

// 设计一个对象方法计算跟其他点的距离

- (double)distanceWithOther:(Point2D *)other

{

// 在对象方法里 调用 类方法     在类方法中调用对象方法也可以实现

return [Point2D distanceBetweenPoint1:self andPoint2:other];

}

// 设计一个类方法计算两个点之间的距离

+ (double)distanceBetweenPoint1:(Point2D *)p1 andPoint2:(Point2D *)p2

{

// ( (x1 - x2)的平方 + (y1 - y2)的平方 ) 开跟

// (x1 - x2)

double xCha = [p1 x] - [p2 x];

// (x1 - x2)的平方

double xChaPF = pow(xCha, 2);

// (y1 - y2)

double yCha = [p1 y] - [p2 y];

// (y1 - y2)的平方

double yChaPF = pow(yCha, 2);

return sqrt(xChaPF + yChaPF);

}

@end

/*

设计一个类Circle,表示二维平面中的圆

1> 属性

* double _radius (半径)

* Point2D *_point (圆心)

2> 方法

* 属性相应的getter和setter

* 设计一个对象方法,判断与其他圆是否相交(相交返回YES,否则返回NO)

* 设计一个类方法,判断两个圆是否相交(相交返回YES,否则返回NO)

*/

//  圆

@interface Circle : NSObject

{

double _radius;   // 半径

Point2D *_point;   // 圆心    此次不宜用继承,而是用组合

}

// 半径的getter和setter

- (void)setRadius:(double)radius;

- (double)radius;

// 圆心的setter和getter

- (void)setPoint:(Point2D *)point;

- (Point2D *)point;

// 设计一个对象方法,判断与其他圆是否相交(相交返回YES,否则返回NO

// 返回值是BOOL类型的,方法名一般都以is开头

- (BOOL)isIntersectWithOther:(Circle *)other;

// 设计一个类方法,判断两个圆是否相交(相交返回YES,否则返回NO)

// 返回值是BOOL类型的,方法名一般都以is开头

+ (BOOL)isIntersectBetweenCircle1:(Circle *)c1 andCircle2:(Circle *)c2;

@end

@implementation Circle

// 半径的getter和setter

- (void)setRadius:(double)radius

{

_radius = radius;

}

- (double)radius

{

return _radius;

}

// 圆心的setter和getter

- (void)setPoint:(Point2D *)point

{

_point = point;

}

- (Point2D *)point

{

return _point;

}

// 设计一个对象方法,判断与其他圆是否相交(相交返回YES,否则返回NO

// 返回值是BOOL类型的,方法名一般都以is开头

- (BOOL)isIntersectWithOther:(Circle *)other

{

// 如果两个圆的圆心距离 >= 半径和,不相交;否则相交

Point2D *p1 = [self point];

Point2D *p2 = [other point];

double disPoint = [p1 distanceWithOther:p2];   // 两个圆心之间的距离

NSLog(@"圆心之间的距离为:%f", disPoint);

double heRadius = [self radius] + [other radius];

NSLog(@"半径和为:%f", heRadius);

/*

if(disPoint < heRadius)  // 相交

{

return YES;

}

return NO;

*/

// return (disPoint < heRadius) ? YES : NO;

return disPoint < heRadius;

}

// 设计一个类方法,判断两个圆是否相交(相交返回YES,否则返回NO)

// 返回值是BOOL类型的,方法名一般都以is开头

+ (BOOL)isIntersectBetweenCircle1:(Circle *)c1 andCircle2:(Circle *)c2

{

// 在类中调用对象方法

return [c1 isIntersectWithOther:c2];

}

@end

int main()

{

void testCircle();  // 方法声明

testCircle();    // 方法调用

void testPoint2D();

//testPoint2D();

return 0;

}

// 验证Circle相关方法是否正确

void testCircle()

{

// 创建圆对象

Circle *c1 = [Circle new];

// 设置圆的半径

[c1 setRadius:3];

// 创建点对象作为圆心

Point2D *p1 = [Point2D new];

// 设置点的x、y

[p1 setX:1 andY:1];

// 设置点p1作为圆c1的圆心

[c1 setPoint:p1];

// 创建圆对象

Circle *c2 = [Circle new];

// 设置圆的半径

[c2 setRadius:6];

// 创建点对象作为圆心

Point2D *p2 = [Point2D new];

// 设置点的x、y

[p2 setX:55 andY:66];

// 设置点p1作为圆c1的圆心

[c2 setPoint:p2];

// 判断两个圆是否相交

BOOL result = [c1 isIntersectWithOther:c2];

NSLog(@"相交吗?---%d", result);

BOOL result2 = [Circle isIntersectBetweenCircle1:c1 andCircle2:c2];

NSLog(@"相交吗?---%d", result2);

}

// 验证Point2D相关方法是否正确

void testPoint2D()

{

Point2D *p1 = [Point2D new];

[p1 setX:2 andY:2];

Point2D *p2 = [Point2D new];

[p2 setX:5 andY:6];

// double dis = [p1 distanceWithOther:p2];

double dis = [Point2D distanceBetweenPoint1:p1 andPoint2:p2];

NSLog(@"dis is %f", dis);

}

时间: 2024-07-28 21:22:02

【原】---黑马程序员OC之综合小练习的相关文章

黑马程序员-OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数

1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到: 当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如下 // 声明 @interface  类名  (分类名称) @end // 实现 @implementation 类名 (分类名称) @end 2:分类的好处,当一个类比较庞大时,不同的部分可以放到不同的分类中,也方便团队中类的开发: 3:分类使用注意: a:分类不能增加成员变量,只能对原类增加方

黑马程序员-OC学习笔记之NSString与NSMutableString

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.NSString与NSMutableString 相信大家对NSString类都不陌生,它是OC中提供的字符串类,它的对象中的字符串都是不可变的,而它的子类NSMutableString类的对象中的字符串就是可变的.什么是可变与不可变呢?二者的区别就是在已经创建的一个字符串对象中,在程序中能不能更改字符串,比如拼接新的字符串,可变的可以在原字符串中更改,

黑马程序员——oc语言学习心得—— 属性声明和赋值

黑马程序员——oc语言学习心得—— 属性声明和赋值 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,在oc中所有类继承与终极父类Object2,声明字符变量采用N是string  *_xxx 实例变量一般以下划线开头3,在oc中方法以+ -号区分 -号开头是实例方法或对象方法  +号开头是类方法  前置用对象调用 后者用类名调用4,在xcode4以后声明@property 不用在写@snysize  自动生成get.set方法5,属性

黑马程序员-OC内存管理 @property的增强

涉及到内存管理,只读,多线程等很多功能时,setter和getter方法也就没那么简单了:当然@property依然强大,很好用: 1:内存管理相关参数: *:retain:  (如果是oc对象类型),生成的setter会自动release旧值,retain新值: *:assign:(适用于非oc对象)  这个是默认的值 *:copy:release旧值,copy新值: @property (retain) NSString *name; // 同类型的参数不能同时写 // @property

黑马程序员-OC self super isa指针

self指针: self是oc面向对象设计中的一个特殊指针,相当于java中的this,但是比this强大,this只能访问实例对象的相关方法和成员变量,或者说this只代表实例对象: self不仅可以代表实例对象,还可以代表类对象:谁调用当前方法,self就代表谁:如果self用在了以"-"号的方法中,也就是对象方法中,那么就代表实例对象,若果在"+"号开头的方法中,self就代表类对象,因为只有类对象才能调用以"+"号开头的方法: self调

黑马程序员 oc与c的区别,联系

1.文件的扩展名的区别       1>c语言源文件的扩展名是.c,而oc的扩展名是.m       2>c语言经过编译之后得到的目标模块扩展名是.obj,而oc编译之后是.o       3>c语言目标程序与其他目标程序和库函数经过连接得到可执行文件的扩展名是.exe,而oc是.out2.两者的编程思想是不同的        c语言是面向过程的编程语言,oc是面向对象的编程语言3.oc语言对于c语言的拓展       oc是面向对象的编程语言,它的基本数据类型比c语言多了个bool类型

黑马程序员-OC学习笔记之Foundation框架NSNumber、NSValue和NSDate

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.NSNumber 前几篇笔记中,小桥复习了Foundatio框架中的几个类,这三个是OC学习的尾声了. 小桥已经复习过OC数组类NSArray,也说过它只能存放OC的对象,对于基本的数据类型确无能为力,但是实际编程中经常要把基本的数据如int.float,结构体存放的OC数组中,怎么办?这里的NSNumber就有用了,它能够把基本数据类型包装成OC对象.

黑马程序员-OC面向对象继承关系和组合关系笔记

继承关系是描述类和类之间的关系,两个类分别称为子类和父类,子类继承了父类,子类就拥有了父类的属性和方法: 继承的关系特点描述出来就是:** "是" **  (例如:学生类 是 人类) 组合关系描述的语句是:**** "拥有" ***  (例如:学生有成绩这个属性,而成绩属性本来就是一个成绩类的对象 ) 继承示例代码: #import <Foundation/Foundation.h> //Animal类的声明 @interface Animal : NS

黑马程序员-OC学习笔记之block

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9426    Accepted Submission(s): 4151 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做par