Object C中分类的使用
来源:互联网 发布:java qq邮箱 编辑:程序博客网 时间:2024/05/19 22:54
所谓分类:即在不改变原来类内容的基础上,增加类的方法。
1. 分类的实现
下面为Fraction 类添加加减乘除四则算,
原始的Fraction类接口部分:
#import <Foundation/Foundation.h>//定义Fraction类@interface Fraction : NSObject@property int numerator, denominator;-(void)setTo:(int)n andOver:(int)d;-(Fraction *) add: (Fraction *)f;-(void) reduce;-(double) convertToNum;-(void) print;@end
在原始类中添加分类的格式:
@interface Fraction (MathOps): 这个语句告诉编译器你为Fraction 声明了一个分类MathOps。
添加四则运算分类的代码如下:
#import <Foundation/Foundation.h>#import "fraction.h"//分类MathOps声明@interface Fraction (MathOps)-(Fraction *) add: (Fraction *) f;-(Fraction *) mul: (Fraction *) f;-(Fraction *) sub: (Fraction *) f;-(Fraction *) div: (Fraction *) f;@end@implementation Fraction (MathOps)-(Fraction *) add: (Fraction *) f{ //两个分数相加 //a/b + c/d = ((a*d) + (c*b))/ (d*b) Fraction *result = [[Fraction alloc] init]; result.numerator = (numerator * f.denominator) + (denominator * f.numerator); result.denominator = denominator*f.denominator; [result reduce]; return result;}-(Fraction *) mul: (Fraction *) f{ //两个分数相减 //a/b + c/d = ((a*d) -(c*b))/ (d*b) Fraction *result = [[Fraction alloc] init]; result.numerator = (numerator * f.denominator) - (denominator * f.numerator); result.denominator = denominator*f.denominator; [result reduce]; return result;}-(Fraction *) sub: (Fraction *) f{ Fraction *result = [[Fraction alloc] init]; result.numerator = numerator * f.numerator; result.denominator = denominator * f.denominator; [result reduce]; return result;}-(Fraction *) div: (Fraction *) f{ Fraction *result = [[Fraction alloc] init]; result.numerator = numerator * f.denominator; result.denominator = denominator * f.numerator; [result reduce]; return result;}@endint main(int argc, const char * argv[]) { @autoreleasepool { Fraction *a = [[Fraction alloc] init]; Fraction *b = [[Fraction alloc] init]; Fraction *result; [a setTo:1 over:3]; [b setTo:2 over:5]; result = [a add: b]; [result print]; result = [a mul: b]; [result print]; } return 0;}
对于分类文件的命名:一般来说分类的.h/.m 文件的名称由原类A 分类B的名称组合而成,可以是AB 或A+B。
使用时如果将分类放到主类定义的文件汇总,那么这个类的所有用户都将访问这个分类中的方法。如果不能直接修改原始的头文件,除了单独保存,没有其他选择
注意:
a. 分类只能增加方法,不能增加成员变量。
b. 分类方法实现中可以访问原类中声明的成员变量。
c. 方法调用的优先级:分类(最后参与编译的分类优先)--->原类--->父类。
d.分类可以重载该类的另一个方法,但是通常认为这种做法是卑劣的设计习惯。第一:重载一个方法后,再也不能访问原来的方法,因此,必须小心将被重载方法中的所有功能复制到替换方法中,如果确实需要重载方法,可以考虑常见子类,如果在子类中重载方法,仍然可以通过想super发送消息类来引用父类的方法。因此不必了解重载方法的内容就能够调用父类的方法,并向子类的方法添加自己的功能。
0 0
- Object C中分类的使用
- Object-C中分类
- Object-C中分类
- object c的分类
- object-c分类
- Object-c------分类
- Object-C 多线程中锁的使用-NSLock
- Object-C 多线程中锁的使用-NSLock
- [Object-C]UIButton中setTitleEdgeInsets和setImageEdgeInsets的使用
- 在Object-C中使用@property和@synthesize的区别
- object-c @property 的使用
- object-c @property 的使用
- Object-C 的block使用
- object-c @property 的使用
- object-c ARC的使用
- Object-c-数组的使用
- Object-c KVC的使用
- object-c 分类和扩展
- Linux查看系统IO
- 统计分析用户信息量的工具Flurry的使用
- Note2 N7100安装Android5.0系统
- H2数据库使用
- ubuntu udhcp, lease time test
- Object C中分类的使用
- 浅析Lua中table的遍历和删除(转)
- Android第三方移动支付解决方案即将推出
- c++构造函数和拷贝构造函数
- grub2 install xubuntu
- Shell编程应用篇之网站自动化备份
- Object C 内存管理
- JUnit4---Hamcrest匹配器常用方法总结
- Linux 批量删除指定后缀的文件