*接口与实现文件
在这些时间里用你的类声明并且定义这些单独的文件。如果你用的是Xcode,你将要开始一个新的项目称为FractionTest。紧紧跟着这个项目文件是main.m
#import "Fraction.h"
int main(int argc,char* argv[])
{
@autoreleasepool{
Fraction *myFraction = [[Fraction alloc]init];
[myFraction setNumerator:1];
[myFraction setDenominator:3];
NSLog(@"the value of myFraction is:");
[myFraction print];
}
return 0;
}
这个文件并没有包含这个Fraction类。然而,它并没有输出文件称为Fraction.h。
通常情况下,一个类声明要产生它自己的文件,称为class.h。让我们推出这个类的声明Fraction.h以及定义这个Fraction.m。
Xcode将要增加两个文件在你的项目中:Fraction.h和Fraction.m.
#import "Fraction.h"
int main(int argc,char *argv[])
{
@autoreleasepool{
Fraction *myFraction = [[Fraction alloc]init];
[myFraction setNumberator:1];
[myFraction setDenominator:3];
NSLog(@"The value of myFraction is:");
[myFraction print];
}
return 0;
}
下面是文件Fraction.h
#import <Fraction/Fraction.h>
@interface Fraction:NSObject
-(void) print;
-(void) setNumerator:int(n);
-(void) setDenominator:(int)d;
-(int) numerator;
-(int) denominator;
-(double) convertToNum;
@end
接口文件告诉这个编译器有六个方法:print,setNumerator,setDenominator,numerator,denominator,以及convertToNum.
#import "Fraction.h"
@implementation Fraction
{
int numerator;
int denominator;
}
-(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 NAN;
}
@end
*语法合成方法
第一步是用这个@property检测你的接口来定义你自己的属性。这个属性同你命名的实例变量相同。在Fraction类中,这两个变量Numerator和denominator分类。新的接口部分由@property来增加。
@interface Fraction:NSObject
@property int numerator,denominator;
-(void) print;
-(double) convertToNum;
@end
#import "Fraction.h"
@implementation Fraction
@synthesize numerator,denominator;
-(void)print
{
NSLog(@"%i%i",numerator,denominator);
}
-(double)convertToNum
{
if(denomanator != 0)
return (double)numerator/denominator;
else
return NAN;
}
@end
*用点操作符
OC语言能够使你通过操作属性用更多方便的语法。来得到并且存储这个numerator值在myFraction,你能这样写下:
[myFraction numerator]
发送这个numerator信息给myFraction对象,来返回一个值。你能写一个相等的表达式用点操作符:
myFraction.numerator 通常的格式如下所示:
instance.property
你能用简单的语法来分配这些变量:
instance.property = value
紧接着写下下面的值:
[instance setProperty:value]
[myFraction setProperty:1];
[myFraction setDenominator:3];
这里有相等的方式来写下相同的两行:
myFraction.numerator = 1;
myFraction.denominator = 3;
我们能用新的语法特征方式并且访问这些属性。
下面我来看一下点操作符的用法。
#import "Fraction.h"
int main(int argc.char* argv[])
{
@autoreleasepool{
Fraction *myFraction = [[Fraction alloc]init];
myFraction.numerator = 1;
myFraction.denominator = 3;
NSLog(@"the numerator is %i",myFraction.numerator);
NSLog(@"the numerator is %i",myFraction.denominator);
}
return 0;
}
*多参数方式
让我们继续看下Fraction类并且增加一些其他东西。你需要定义六个方法。我们来设置这个numerator和denominator信息。你将要定义这些简单的方法在这些列表中。例如,这些方法名被称为addEntryWithName:andEmail:可以取两个参数,假设一个名一个是邮件地址。这个方法addEntryWithName:andEmail:andphone设置三个参数:name,email address以及一个手机号。代码如下:
[myFraction setNumerator:1 andDenominator:3];
让我们来用一个新的方法工作。首先增加这个生命setTo:over:to这个接口文件。
#import <Foundation/Foundation.h>
@interface Fraction:NSObject
@property int numerator,denominator;
-(void) print;
-(void) setTo:(int)n over:(int)d;
-(double) convertToNum;
@end
接下来,我们增加这个新的方法到实现文件中。
#import "Fraction.h"
@implementation Fraction
@synthesize numerator,denominator;
-(void) print
{
NSLog(@"%i%i",numerator,denominator);
}
-(double)convertToNum
{
if(denominator != 0)
return (double)numerator/denominator;
else
return NAN;
}
-(void)setTo:(int)n over:(int)d
{
numerator = n;
denominator = d;
}
@end
在这里我们测试一下新的方法。
#import "Fraction.h"
int main(int argc,char* argv[])
{
@autoreleasepool{
Fraction *myFraction = [[Fraction alloc]init];
[aFraction setTo:1 over:3];
[aFraction print];
}
return 0;
}
在Fractions中的操作
让我们假设你将要增加先前的一个声明以及一个定义的增加,最后增加测试用例到程序中。
@interface Fraction:NSObject
@property int numerator,denominator;
-(void) print;
-(void) setTo:(int)n over:(int) d;
-(double) convertToNum;
-(void) add:(Fraction*)f;
@end;
接下来看这些解释文件
#import "Fraction.h"
@implementation Fraction
@synthesize numerator,denominator;
-(void) print
{
NSLog(@"%i%i",numerator,denominator);
}
-(double) convertToNum
{
if(denominator != 0)
return (double)numerato/denominator
else
return NAN;
}
-(void)setTo:(int)n over:(int)d
{
numerator = n;
denominator = d;
}
-(void)add:(Fraction*)f
{
numerator = numerator*f.denominator+denominator*f.numerator;
denominator = denominator*f.denominator;
}
@end
#import "Fraction.h"
int main(int argc,char *argv[])
{
@autoreleasepool{
Fraction* aFraction = [[Fraction alloc]init];
Fraction* bFraction = [[Fraction alloc]init];
[aFraction setTo:1 over:4];
[bFraction setTo:1 over:2];
[aFraction print];
NSLog(@"+");
[bFraction print];
NSLog(@"=");
[aFraction add:bFraction];
[aFraction print];
}
return 0;
}
这个测试比较直接。这里面有两个Fractions,它们称为aFraction和bFraction,并且分配并且初始化。
*分配并且返回对象
-(Fraction*)add:(Fraction*)f
{
Fraction *result = [[Fraction alloc]init];
result.numerator = numerator*f.denominator +denominator*f.numerator;
result.denominator = denominator*f.denominator;
[result reduce];
return result;
}
在这些时间里用你的类声明并且定义这些单独的文件。如果你用的是Xcode,你将要开始一个新的项目称为FractionTest。紧紧跟着这个项目文件是main.m
#import "Fraction.h"
int main(int argc,char* argv[])
{
@autoreleasepool{
Fraction *myFraction = [[Fraction alloc]init];
[myFraction setNumerator:1];
[myFraction setDenominator:3];
NSLog(@"the value of myFraction is:");
[myFraction print];
}
return 0;
}
这个文件并没有包含这个Fraction类。然而,它并没有输出文件称为Fraction.h。
通常情况下,一个类声明要产生它自己的文件,称为class.h。让我们推出这个类的声明Fraction.h以及定义这个Fraction.m。
Xcode将要增加两个文件在你的项目中:Fraction.h和Fraction.m.
#import "Fraction.h"
int main(int argc,char *argv[])
{
@autoreleasepool{
Fraction *myFraction = [[Fraction alloc]init];
[myFraction setNumberator:1];
[myFraction setDenominator:3];
NSLog(@"The value of myFraction is:");
[myFraction print];
}
return 0;
}
下面是文件Fraction.h
#import <Fraction/Fraction.h>
@interface Fraction:NSObject
-(void) print;
-(void) setNumerator:int(n);
-(void) setDenominator:(int)d;
-(int) numerator;
-(int) denominator;
-(double) convertToNum;
@end
接口文件告诉这个编译器有六个方法:print,setNumerator,setDenominator,numerator,denominator,以及convertToNum.
#import "Fraction.h"
@implementation Fraction
{
int numerator;
int denominator;
}
-(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 NAN;
}
@end
*语法合成方法
第一步是用这个@property检测你的接口来定义你自己的属性。这个属性同你命名的实例变量相同。在Fraction类中,这两个变量Numerator和denominator分类。新的接口部分由@property来增加。
@interface Fraction:NSObject
@property int numerator,denominator;
-(void) print;
-(double) convertToNum;
@end
#import "Fraction.h"
@implementation Fraction
@synthesize numerator,denominator;
-(void)print
{
NSLog(@"%i%i",numerator,denominator);
}
-(double)convertToNum
{
if(denomanator != 0)
return (double)numerator/denominator;
else
return NAN;
}
@end
*用点操作符
OC语言能够使你通过操作属性用更多方便的语法。来得到并且存储这个numerator值在myFraction,你能这样写下:
[myFraction numerator]
发送这个numerator信息给myFraction对象,来返回一个值。你能写一个相等的表达式用点操作符:
myFraction.numerator 通常的格式如下所示:
instance.property
你能用简单的语法来分配这些变量:
instance.property = value
紧接着写下下面的值:
[instance setProperty:value]
[myFraction setProperty:1];
[myFraction setDenominator:3];
这里有相等的方式来写下相同的两行:
myFraction.numerator = 1;
myFraction.denominator = 3;
我们能用新的语法特征方式并且访问这些属性。
下面我来看一下点操作符的用法。
#import "Fraction.h"
int main(int argc.char* argv[])
{
@autoreleasepool{
Fraction *myFraction = [[Fraction alloc]init];
myFraction.numerator = 1;
myFraction.denominator = 3;
NSLog(@"the numerator is %i",myFraction.numerator);
NSLog(@"the numerator is %i",myFraction.denominator);
}
return 0;
}
*多参数方式
让我们继续看下Fraction类并且增加一些其他东西。你需要定义六个方法。我们来设置这个numerator和denominator信息。你将要定义这些简单的方法在这些列表中。例如,这些方法名被称为addEntryWithName:andEmail:可以取两个参数,假设一个名一个是邮件地址。这个方法addEntryWithName:andEmail:andphone设置三个参数:name,email address以及一个手机号。代码如下:
[myFraction setNumerator:1 andDenominator:3];
让我们来用一个新的方法工作。首先增加这个生命setTo:over:to这个接口文件。
#import <Foundation/Foundation.h>
@interface Fraction:NSObject
@property int numerator,denominator;
-(void) print;
-(void) setTo:(int)n over:(int)d;
-(double) convertToNum;
@end
接下来,我们增加这个新的方法到实现文件中。
#import "Fraction.h"
@implementation Fraction
@synthesize numerator,denominator;
-(void) print
{
NSLog(@"%i%i",numerator,denominator);
}
-(double)convertToNum
{
if(denominator != 0)
return (double)numerator/denominator;
else
return NAN;
}
-(void)setTo:(int)n over:(int)d
{
numerator = n;
denominator = d;
}
@end
在这里我们测试一下新的方法。
#import "Fraction.h"
int main(int argc,char* argv[])
{
@autoreleasepool{
Fraction *myFraction = [[Fraction alloc]init];
[aFraction setTo:1 over:3];
[aFraction print];
}
return 0;
}
在Fractions中的操作
让我们假设你将要增加先前的一个声明以及一个定义的增加,最后增加测试用例到程序中。
@interface Fraction:NSObject
@property int numerator,denominator;
-(void) print;
-(void) setTo:(int)n over:(int) d;
-(double) convertToNum;
-(void) add:(Fraction*)f;
@end;
接下来看这些解释文件
#import "Fraction.h"
@implementation Fraction
@synthesize numerator,denominator;
-(void) print
{
NSLog(@"%i%i",numerator,denominator);
}
-(double) convertToNum
{
if(denominator != 0)
return (double)numerato/denominator
else
return NAN;
}
-(void)setTo:(int)n over:(int)d
{
numerator = n;
denominator = d;
}
-(void)add:(Fraction*)f
{
numerator = numerator*f.denominator+denominator*f.numerator;
denominator = denominator*f.denominator;
}
@end
#import "Fraction.h"
int main(int argc,char *argv[])
{
@autoreleasepool{
Fraction* aFraction = [[Fraction alloc]init];
Fraction* bFraction = [[Fraction alloc]init];
[aFraction setTo:1 over:4];
[bFraction setTo:1 over:2];
[aFraction print];
NSLog(@"+");
[bFraction print];
NSLog(@"=");
[aFraction add:bFraction];
[aFraction print];
}
return 0;
}
这个测试比较直接。这里面有两个Fractions,它们称为aFraction和bFraction,并且分配并且初始化。
*分配并且返回对象
-(Fraction*)add:(Fraction*)f
{
Fraction *result = [[Fraction alloc]init];
result.numerator = numerator*f.denominator +denominator*f.numerator;
result.denominator = denominator*f.denominator;
[result reduce];
return result;
}