[学习笔记—Objective-C]《Objective-C 程序设计 第6版》第七章 类

本文介绍了使用Objective-C设计分数类的基本方法,包括属性的合成、点运算符的使用、局部变量的作用域、self关键字的功能、对象作为参数及返回值的应用等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本章的学习笔记以本书第六章的例题(两个分数的加法)为主线展开,逐步介绍重要的知识点。

Part 1. 合成存取方法

从Objective-C 2.0 开始,可自动生成设置方法和取值方法:通过属性。

接口文件:

@interface Fraction : NSObject

@property int numerator, denominator; //分子,分母

实现文件:

@implementation Fraction

@synthesize numerator, denominator;//告诉编译器生成一对设置方法和取值方法。
  • 通过@property指令,就不需要在实现部分生成相应的实例变量。

  • 如果有称为x的属性,那么在实现部分会导致编译器自动生成一个设值方法setX 和取值方法 x

Part 2. 使用点运算符访问属性

设值方法

 [myFraction setNumerator: 1];
 [myFraction setDenominator: 3]; 

//等价于

  myFraction.numerator = 1; 
  myFraction.denominator = 3;

Part 3. 局部变量

将一个分数约分的方法:

-(void) reduce    
{
    int u = numerator;
    int v = denominator;
    int temp;    
    //u,v,temp 局部变量

    while (v!=0)
    {
        temp = u % v;
        u = v;
        v = temp;
    }

    numerator /= u;
    denominator /= u;
}
  • 其他方法无法访问reduce方法的局部变量
  • 默认初始化为nil,当方法返回的时候,变量的值都消失了;实例变量在多次方法调用时保持自己的值

Part 4. self 关键字

self关键字的用途:在方法内直接指明消息的接受者(是对象)。

-(void) add: (Fraction *) f 
{
    numerator = numerator * f.denominator + denominator * f.numerator;
    denominator = denominator * f.denominator;

    [self reduce]; //进行约分。 self 作为aFraction的引用,分数得到约简。(main函数中,计算对象 aFraction 和 bFraction的和,将结果直接约分)

}

Part 5. 将对象作为参数

  • 方法声明:
//add:方法的参数是Fracion类对象的一个引用。当传递一个对象作为参数时,实际上是传递了一个数据存储位置的引用。

-(void) add: (Fraction *) f; //将分数与分数相加
  • 方法展开:
-(void) add: (Fraction *) f   
{   
    numerator = numerator * f.denominator + denominator * f.numerator;
    denominator = denominator * f.denominator;
}

不能用这种方法直接指定参数f的实例变量。而是通过名字f标识这个对象,然后通过对f应用点运算符来获得实例变量。

Part 6. 将对象作为方法的返回值

在方法中创建新的分数(对象)来存储相加的结果并向消息的发送者返回新的Fraction

//返回一个对象。参数是对象。
-(Fraction *) add: (Fraction *) f 
{
    //创建新的对象存储相加后的结果
    Fraction *result = [[Fraction alloc] init];

    //对象result里面自动生成了numerator 和 denominator
    result.numerator =numerator * f.denominator + denominator * f.numerator;
    result.denominator = denominator * f.denominator;

    [result reduce]; //对相加的结果约分  

    return result;   //返回值
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值