3.3 用于处理分数的Objective-C类

现在我们将用Objective-C定义一个实际的类,并学习如何使用类的实例。

再次,我们将先学习过程。这样,实际的程序范例可能不是特别实用。那些更加实际的内容将在稍后讨论。

假设要编写一个用于处理分数的程序。可能需要处理加、减、乘、除等运算。如果不知道什么是类,那么可使用如下程序行来开始这个简单的程序:

代码清单3-1


//Simple program to work with fractions

import<Foundation/Foundation.h>

int main(int argc, char*argv[])

{

NSAutoreleasePool*pool=[[NSAutoreleasePool alloc]init];

int numerator=1;

int denominator=3;

NSLog(@“The fraction is%i/%i”,numerator, denominator);

[pool drain];

return 0;

}


代码清单3-1输出


The fraction is 1/3


在代码清单3-1中,分数是以分子和分母的形式表示的。创建自动释放池之后,main中的前两行将变量numerator和denominator都声明为整型,并分别给它们赋予初值1和3。这两个程序行与下面的程序行等价:


int numerator, denominator;

numerator=1;

denominator=3;


通过将1存储到变量numerator中,将3存储到变量denominator中可表示分数1/3。如果需要在程序中存储多个分数,这种方法可能比较麻烦。每次要引用分数时,都必须引用相应的分子和分母。而且操作这些分数也相当困难。

如果能把一个分数定义成单个实体,用单个名称(例如myFraction)来共同引用它的分子和分母,那么会更好。这种方法可以使用Objective-C来实现,并从定义一个新类开始。

代码清单3-2使用一个名为Fraction的新类重写了代码清单3-1中的函数。下面给出这个程序,随后详细解释了它是如何工作的。

代码清单3-2


//Program to work with fractions-class version

import<Foundation/Foundation.h>

//——@interface section——

@interface Fraction:NSObject

{

int numerator;

int denominator;

}

-(void)print;

-(void)setNumerator:(int)n;

-(void)setDenominator:(int)d;

@end

//——@implementation section——

@implementation Fraction

-(void)print

{

NSLog(@“i/%i”,numerator, denominator);

}

-(void)setNumerator:(int)n

{

numerator=n;

}

-(void)setDenominator:(int)d

{

denominator=d;

}

@end

//——program section——

int main(int argc, char*argv[])

{

NSAutoreleasePool*pool=[[NSAutoreleasePool alloc]init];

Fraction*myFraction;

//Create an instance of a Fraction

myFraction=[Fraction alloc];

myFraction=[myFraction init];

//Set fraction to 1/3

[myFraction setNumerator:1];

[myFraction setDenominator:3];

//Display the fraction using the print method

NSLog(@“The value of myFraction is:);

[myFraction print];

[myFraction release];

[pool drain];

return 0;

}


代码清单3-2输出


The value of myFraction is:

1/3

从代码清单3-2的注释中可以看到,程序在逻辑上分为3个部分:

·@interface部分

·@implementation部分

·program部分


@interface部分用于描述类、类的数据成分以及类的方法;而@implementation部分包括实现这些方法的实际代码。最后,program部分包含实现程序预期目的的程序代码。

以上每个部分都是每个Objective-C程序的一部分,即使你可能不需要自己编写每一部分。你将看到,每一部分通常放在它自己的文件中。然而,从现在起,我们将把它们放到一个单独的文件中。