重要的一章,类:
-(void) add: (Fraction *) f
现在是要将之前文件中的接口和实现分离开成两个单独的文件
通常,类的声明(即,@interface部分)要放在他自己的名为class.h的文件中。而类的定义(即,@implementation部分)通常放在想通名称的扩展名要使用.m。
类的接口部分放在Fraction.h文件中:
#import <Foundation/Foundation.h>
@interface Fraction : NSObject
{
int numerator;
int denominator;
}
-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;
-(int) numerator;
-(int) denominator;
-(double)
convertToNum;
@end
该接口中包含了六个方法以及两个变量。
类的实现部分放在Fraction.m文件中:
#import
"Fraction.h"
@implementation Fraction
-(void) print
{
NSLog(@"%i/%i", numerator,denominator);
}
-(void) setNumerator: (int) n
{
numerator = n;
}
-(void) setDenominator: (int) d
{
denominator = d;
}
-(int) numerator
{
return numerator;
}
-(int) denominator
{
return denominator;
}
-(double) convertToNum
{
if(denominator != 0)
return (double) numerator / denominator;
else
return 1.0;
}
@end
使用以下语句将接口文件导入到实现文件中:
#import "Fraction.h"
这样做的目的是,使编译器知道Fraction类声明的类的方法,同事还能确保两个文件的一致性。
下面是一个测试程序,FractionTest.m
#import "Fraction.h"
int main (int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Fraction *myFraction = [[Fraction alloc] init];
[myFraction setNumerator: 1];
[myFraction setDenominator: 3];
NSLog (@"The value of myFraction is:");
[myFraction print];
[myFraction release];
[pool drain];
return 0;
}
从Object-C 2.0开始,出现了存取器方法,该方法将之前我们编写的set,get方法合成统一起来
接口里的@property指令
@property int numerator, denominator;
实现里的@synthesize指令
@synthesize numerator, denominator;
从Object-C 2.0开始,可以使用点运算符编写表达式:
myFraction.numerator
或者 myFraction.numerator = 1;
具有多个参数的方法
-(void) setTo: (int) n over: (int) d;
-(void) setTo: (int) n over: (int) d
{
numerator = n;
denominator = d;
}
-(void) add: (Fraction *) f;
这条语句说明add:方法的参数类型是Fraction类。星号是必需的
[aFraction add: bFraction];
Fraction *aFraction = [[Fraction alloc] init];新建了一个Fraction对象名为aFraction
static关键字 静态变量
static int
pageCount= 0;
...
++pageCount;
pageCount是一个静态变量,和其他局部变量不同,静态变量的初始值为0,所以前面显示的初始化是多余的。此外,他们值在程序开始执行时初始化一次,并且在多次调用方法时保存这些数值
self关键字 用来指明对象是当前方法的接收者,如果在add:方法中编写
[self reduce];
就可以对Fraction应用reduce方法,它正式你希望的add:方法的接收者
{
...
[self reduce];
}
这样,reduce方法也同样可使用它
-(Fraction *) add: (Fraction *) f
add:方法使用了一个Fraction作为参数,返回一个名为Fraction的对象。
Fraction *resultFraction;
resultFraction = [aFraction add: bFraction];
[resultFraction print];
[resultFraction release];释放