接着上文来说,上面我们是定义了一个接口的定义,下面我们来实现它,object c中的类文件使用扩展名m.
Fraction.m #import "Fraction.h" @implementation Fraction -(void) setNumerator: (int) n{ numerator=n; -(void) setDenominator: (int) d{ denominator=d; } -(void) setNumerator: (int) n andDenominator: (int) d{ numerator=n; denominator=d; } -(int) numerator{ return numerator; } -(int) denominator{ return denominator; } -(void) print{ printf("%d/%d\n",numerator,denominator); } -(void) m{ printf("-m:The class variable t is %d\n",++t); } +(void) t{ printf("+t:The class variable t is %d\n",++t); } @end因为我们将Fraction.m 与Fraction.h 放在一个文件夹下面,所以#import 使用了” ”,这个类的
下面我们编写调用代码,因为Object-C 基于C 语言,所以程序的入口依然是main 函数。这
里注意#import 的是h,不是m。代码如下:
main.m
#import "Fraction.h" int main(int argc,const char *argv[]){ Fraction *frac=[[Fraction alloc] init]; [frac setNumerator: 3 andDenominator: 5]; [frac print]; printf("The denominator of Fraction is %d\n",frac->denominator); [Fraction t];//调用类方法 [frac m]; [frac release]; return 0; }(1.) 第一行我们创建了Fraction 的实例(对象),Object-C 中实例只能使用指针作为变量,而
(5.) 第六行我们调用了m 方法,这个方法你会发现并没有在@interface 中声明,这里依然调
用了,只是在编译的时候收到一个警告。这就是前面所有的Object-C 是动态语言的原因。
但是一般情况下,你都会给别人提供h 文件,所以你在m 文件中写的h 文件中没有的
方法,别人也是不会知道的,这个方法相当于变相的私有化了。
(6.) 第七行我们释放了frac 实例在第一行alloc 所申请的内存空间,Object-C 的内存管理后面
会看到。另外,你会发现Fraction.h 中没有定义alloc、init、release 方法,但是我们上面
调用了,很显然,这些方法来自于父类NSObject。