11.4 练习

1.扩展代码清单11-1中的MathOps分类,使之包含一个invert方法,这个方法返回一个Fraction,它是接收者的倒置。

2.向类Fraction添加一个名为Comparison的分类。根据以下声明,在这个分类中添加两个方法:


-(BOOL)isEqualTo:(Fraction*)f;

-(int)compare:(Fraction*)f;


如果两个分数相同,第一个方法应该返回YES,否则,返回NO。注意分数的比较方式(如,比较3/4和6/8应当返回YES)。

如果接收者小于参数传递来的分数,则第二个方法应当返回-1,如果二者相等,应返回0,如果接收者大于参数,则应当返回1。

3.通过添加遵守非正式协议NSComparisonMethods(本章前面所列出的)的方法来扩展Fraction类。根据该协议实现前6个方法(isEqualTo:、isLessThanOrEqualTo:、isLessThan:、isGreaterThanOrEqualTo:、isGreaterThan:、isNotEqualTo:)并测试它们。

4.函数sin()、cos()和tan()是Standard Library的一部分(与scanf()一样)。这些函数在头文

件<math.h>中声明,应该使用以下语句把这个头文件导入程序:


import<math.h>


这些函数分别可以用来计算用弧度表示的double参数的sine、cosine或者tangent值。返回的结果也是一个双精度的浮点值。所以,


result=sin(d);


可用于计算d的sine值,角度d的值用弧度表示。为第6章“选择结构”中的Calculator类添加一个名为Trig的分类。根据以下声明,为这个分类添加一些方法来计算sine、cosine和tangent的值:


-(double)sin;

-(double)cos;

-(double)tan;


5.根据本章对合成对象的讨论以及以下接口部分:


@interface Square:NSObject

{

Rectangle*rect;

}

-(Square*)initWithSide:(int)s;

-(int)setSide:(int)s;

-(int)side;

-(int)area;

-(int)perimeter;

-(void)dealloc;//Override to release the Rectangle objects memory

@end


编写Square的实现部分,以及用来检验其方法的测试程序。