object-c学习:类别Category
来源:互联网 发布:mac air演讲者模式 编辑:程序博客网 时间:2024/05/17 22:37
一直不明白类别的意思,因为C和java都没有类似的概念。
看到如下的描述,比较清晰,供大家参考:
如果你想扩充一个类的功能,但又不想使用继承,你可以选择类别。
下面我们写一个Fraction 的类别,为Fraction 类增加计算两个分数的加减乘除的方法。
FractionMath.h
#import "Fraction.h"
@interface Fraction (Math1)
-(Fraction*) mul: (Fraction*) f;//乘法,就是传入一个Fraction 作为参数,与当前的Fraction
进行计算
-(Fraction*) div: (Fraction*) f;//除法
@end
@interface Fraction (Math2)
-(Fraction*) add: (Fraction*) f;//加法
@end
其实类别就是在你想要扩展的@interface 的名字后面加个( ),里面写上类别的名字,这个名
字必须是唯一的,也就是说一个@interface 只能有一个类别为XXX 的Category。
FractionMath.m
#import "FractionMath.h"
@implementation Fraction (Math1)
-(Fraction*) mul: (Fraction*) f{
return [[Fraction alloc] initWithNumerator: numerator*[f numerator]
denominator: denominator*[f denominator]];
}
-(Fraction*) div: (Fraction*) f{
return [[Fraction alloc] initWithNumerator: numerator*[f denominator]
denominator: denominator*[f numerator]];
}
@end
@implementation Fraction (Math2)
-(Fraction*) add: (Fraction*) f{
return [[Fraction alloc] initWithNumerator:
numerator*[f denominator] + denominator*[f numerator]
denominator: denominator*[f denominator]];
}
@end
类别的实现类也就是类型名后后面加个( ),里面写上类别的名字,其他的没有什么不同的。
上面唯一可能会让你头晕的就是加减乘除的实现代码,实际上就是嵌套调用,写成了一个语
句而已。拿add 的实现来说,就是创建要返回的计算结果Fraction 的实例,然后依据分数相
加要先通分的规则,结果的分子initWithNumber 就是第一个分数的分子*第二个分数的分母,
再加上第二个分数的分子*第一个分数的分母,分母denominator 参数就是两个分数的分母
相乘。
main.m
#import "FractionMath.h"
int main( int argc, const char *argv[] ) {
Fraction *frac1 = [[Fraction alloc] initWithNumerator: 1 denominator: 3];
Fraction *frac2 = [[Fraction alloc] initWithNumerator: 2 denominator: 5];
Fraction *frac3 = [frac1 mul: frac2];
[frac1 print];
printf( " * " );
[frac2 print];
printf( " = " );
[frac3 print];
printf( "\n" );
Fraction *frac5 = [frac1 add: frac2];
[frac1 print];
printf( " + " );
[frac2 print];
printf( " = " );
[frac5 print];
printf( "\n" );
[frac1 release];
[frac2 release];
[frac3 release];
[frac5 release];
return 0;
}
- object-c学习:类别Category
- Object-C 学习笔记(二十)---类目(类别)Category
- Object-C中的动态特性(Category类别)
- 【Object-C】类别与扩展Category
- 学习笔记(objective-c)-类别(category)
- Category 类别 -Objective-C
- Category 类别 -Objective-C
- Category 类别 -Objective-C
- Category 类别 -Objective-C
- Category 类别 -Objective-C
- Object-c学习笔记十三-----类别
- object-c学习:category 和 protocol区别
- object-c学习:category 和 protocol区别
- Object-C学习笔记-Category(分类)
- object-c学习:category 和 protocol区别
- Object-C学习笔记-Category(分类)
- Objective-c Category(类别)
- Objective-C 类别(Category)浅谈
- JAVA 正则表达式 (超详细)
- jar包无法运行——could not find the main class...(java -jar *.jar可以运行,jar包不可以打开的解决方法)
- erlang lists 系列函数功能与用法详解(共68个函数)
- HDOJ-1796 DFS解容斥问题模板题..
- SOUND SERVICE系统音效服务+震动功能实现
- object-c学习:类别Category
- lcd fb参数如何计算
- Dell Fn键 F1-F12特殊功能键
- 编程规范之--头文件
- Managing Client Network Protocols with WMI Provider
- oracle查看当前登陆的用户信息
- java学习笔记(七)
- 常用到的Intent的URI
- qte移植笔记