oc 笔记2.2

一.要点摘录:

三.类
1.P137 合成存取方法
使用@property 就足够了,并不需 要使用@sythesize变量,注意,如果不使用@sythesize,编译器生成的实例变量会以下划线(_)字符作为名称第一个字符。
2.P141 不带参数名的方法

-(int) set: (int)n: (int)d;

这个方法的第二个参数无命名。此方法名为 set::。语句如下:

[newFraction set 1: 3];

此并非为良好的代码风格。
3.P146
局部变量初始化为 nil,实例变量、静态变量(使局部变量保留多次调用一个方法的值)初始值为0。

二.练手小程序

题目:分数加减及约分。
1.main.c 文件

#import <Foundation/Foundation.h>
#import "Fraction.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here....        
        Fraction *first=[Fraction new];
        Fraction *second=[Fraction new];
        Fraction *result=[Fraction new];

        //[number setUp:5];
        //[number setDown:6];

        //number.up=5;
        //number.down=6;   
       //圆点(自定义也可用)
       //通常用于设置或取得实例变量的值一般不用于方法(代码规范)
       // 不用 _

        [first setTo:1 over:4];
        [second setTo:1 over:2];

        NSLog(@"第一个:");
        [first print];
        NSLog(@"第二个:");
        [second print];

        [first add: second];
       // [first reduce];

        result=[first add:second];
        NSLog(@"总和");
        [result print];
    }
    return 0;
}

2.接口文件

#import <Foundation/Foundation.h>
@interface Fraction : NSObject
@property int up,down;

- (void) setTo: (int)n over: (int)m;  //具有多个参数的方法名
- (double) convertToNum;//判断分母是否为零
- (Fraction *) add: (Fraction*) first;//相加
- (void) reduce;//化简
- (void) print;//打印

//- (void) setUp:(int) n;
//- (void) setDown:(int) d;

//- (int) up;
//- (int) down;
@end

3.实现文件

#import "Fraction.h"
@implementation Fraction
//@synthesize up,down;  
//为两个属性生成一对设值方法和取值方法
//有属性 x,则编译器自动实现一个取值方法 x 和一个设置方法 setX

- (void) setTo: (int)n over: (int)m //设置分子分母值
{
    _up=n;
    _down=m;
}

- (double) convertToNum  //判断分母是否为0
{
  if (_down!=0)
      return(double) _up/_down;
  else
      return NAN;  //这个 nan 是什么?
}

- (Fraction*) add: (Fraction*) Second //相加
{
    Fraction *result=[Fraction new];    
    //a/b+c/d=((a*d)+(b*c))/(b*d)
    result.up=_up*Second.down+_down*Second.up;
    result.down=_down*Second.down;
   // [self reduce];  //self 关键字
  //指明对象是当前方法的接受者,即reduce消息取得了发给add:消息的接收者。
    [result reduce];
    return result;
}

- (void) reduce  //约分
{
    int u=_up;        //此为局部变量 
    int d=_down;
    int temp;

    while (d!=0)
    {
        temp=u%d;
        u=d;
        d=temp;
    }
    _up /=u;
    _down /=u;
}

- (void) print  //打印
{
    NSLog(@"%i/%i",_up,_down);  
    //若实现中未使用@synthesize 
    //则编译器生成的实例变量会以下划线作为其名称的第一个字符
}

/*
- (void) setUp:(int)n
{
    up=n;
}
- (void) setDown:(int)d
{
    down=d;
}

- (int) up
{
    return up;
}
- (int) down
{
    return down;
}
*/
@end

4.输出

第一个
1/4
第二个
1/2
总和
3/4

*注释部分是讲解及优化前的代码。

附:一天要写好几篇博客才能补上之前的了== ><。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值