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程序的一部分,即使你可能不需要自己编写每一部分。你将看到,每一部分通常放在它自己的文件中。然而,从现在起,我们将把它们放到一个单独的文件中。