Objective C2.0学习(七 类)

重要的一章,类:
现在是要将之前文件中的接口和实现分离开成两个单独的文件
通常,类的声明(即,@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:方法的接收者

-(void) add: (Fraction *) f
{
...
[self reduce];
}
这样,reduce方法也同样可使用它

-(Fraction *) add: (Fraction *) f
add:方法使用了一个Fraction作为参数,返回一个名为Fraction的对象。
Fraction *resultFraction;
resultFraction = [aFraction add: bFraction];
[resultFraction print];
[resultFraction release];释放
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值