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的实现部分,以及用来检验其方法的测试程序。