0%

Objective c 类的定义及使用

入了Kindle DXG,再也没有理由偷懒了,每次说开始学习XXX,都坚持不了几天。刚学Objective-c,有些理解有问题,可能存在错误,文章只是做笔记,并不是教程。该例来自于《Objective-2.0程序设计》。

#import 
//导入头文件

@interface Fraction: NSObject
{
    int numerator,denominator;
    
}
-(void) print;//打印分数
-(void) setNumerator: (int) n;//设置分子
-(void) setDenominator: (int) d;//设置分母
-(void) calculate;//计算成小数并输出
-(int) numerator; //把被除数封装
-(int)denominator;//把除数封装
@end
/*
 声明接口(原书称类,初学,暂时不知是否跟JAVA一样分类和接口),分两部分,上面的是第一部分,声音所有变量及方法
 以@interface开始,@end结束
 Fraction为接口名,冒号表示继承,NSObject是父类
 花括号内声明所有的变量,外面声明方法
 -(返回值类型) 方法名:(参数类型)参数名;    [参数列表]
 开头的负号表示该方法为实例方法(只能由实例调用)
 正号表示该方法为类方法(静态方法?)
 */


@implementation Fraction
-(void) print
{
    NSLog(@"%d/%d=",numerator,denominator);
}
-(void) setNumerator:(int)n
{
    numerator=n;
}
-(void) setDenominator:(int)d
{
    denominator=d;
}
-(void) calculate
{
    float result=(float)numerator/denominator;
    //除法,先转float以保证精度
    NSLog(@"%f",result);
}
-(int) numerator
{
    return numerator;
}
-(int) denominator
{
    return denominator;
}
@end
/*
 第二部分写方法的具体实现,从这里看,感觉没有了类和接口的概念,因为自己实现了所有的方法
 */


int main (int argc, const char * argv[])
{
    
    @autoreleasepool {
        //自动生成的,暂时不管,好象是自动释放内存池,类似于GC
        Fraction *myFraction;
        //定义一个对象,* 表示指针
        myFraction=[Fraction alloc];
        //使用父类的alloc方法请求系统分配内存空间
        myFraction=[myFraction init];
        //使用父类的init方法初始化
        //两行可以合并为   myFraction=[[Fraction alloc] init]; 或myFraction=[Fraction new];
        
        [myFraction setNumerator:1];
        //使用setNumerator方法设置分子
        [myFraction setDenominator:3];
        //使用setDenominator方法设置分母
        
        NSLog(@"The value of myFraction is:");
        [myFraction print];
        //调用print函数
        [myFraction calculate];
        //调用calculate函数
        
        printf("被除数 %d\n",[myFraction denominator]);
        //也可以用printf函数,但不会输出时间之类的其他东西
        
    }
    return 0;
}

书中程序还在程序结束调用了release方法,但在新版的xcode中报错,这是因为4.2以后的xcode加入了Automatic Reference Counting特性,不再需要手动释放内存。