2012-02-02 81 views
1

我有以下代码:设置Objective-C的实例变量值

@implementation Fraction 
{ 
     int numerator; 
     int denominator; 
} 

    -(void) setNumerator: (int) n 
{ 
    numerator = n; 
} 
    -(void) setDenominator: (int) d 
{ 
    denominator = d; 
} 
@end 

我想知道为什么你必须有既为分子“n”和“分子”?例如,为什么你就不能设置

-(void) setNumerator: (int) numerator 

为并列于:

-(void) setNumerator: (int) n 
    numerator = n; 
} 

很抱歉,如果这是这样一个基本的问题,但我从没有编程经验的起点开始。

回答

2

方法用于告诉Fraction对象它应该在名为numerator的变量中保留什么值。如“在这里,先生分数,请使用值n作为分子。”在实施此方法时,代码必须处理两个不同的概念:包含新值的参数变量n以及必须更改为的值的实例变量分子 n;因此需要两个不同的名字。行

numerator = n; 

字面意思是“复制Ñ数入变量分子”。

请记住,交易有两个半部分。假设我是Fraction对象,并且你希望我将分子设置为4.你说“将你的分子设置为4,或者setNumerator(4)”,这很好,因为你是人类,选择你想要的号码。但是作为一个低级的Objective-C对象,我所有的代码都是在过去一段时间写出来的;它写在之前值甚至在你的眼睛闪烁。所以setNumerator()的代码必须是通用的;它必须被写为“将分子设置为人们想要的任何值 - 称之为n”。请记住,我的实际变量分子对您是隐藏的;你所能做的就是调用我的方法,这取决于我设置变量。

这就是为什么该方法必须写成使用抽象名称 - n - 对于该值,因为在写入方法时,值是未知的。

+0

哇,这很快谢谢你。但我仍然不清楚为什么需要一个参数变量和一个实例变量。由于分子已被声明为(int),并且在执行给(int)一个类似于4的值的方法时,为什么我们需要首先给出n的值4并将其传递给分子? – CloudDweller 2012-02-02 14:04:52

+0

我给答案增加了很多,希望能帮助到你。 – 2012-02-02 14:12:12

+0

我有点得到你的意思,我知道我是愚蠢的,但我仍然不是100%,为什么需要两个。我们将分子声明为(int),将n声明为(int),因此程序知道将使用int。为什么分子ivar被隐藏,因为我们没有在界面中显示它? – CloudDweller 2012-02-02 14:18:52

0

我认为你可能正在寻找的概念被称为属性。 Take a look hereherehere。属性将允许您设置成员值而不必命名参数或调用方法。您只需为该属性分配一个值即可。

通过函数调用,您必须命名您传递给函数的参数,以便您可以将其分配给类成员。

+0

感谢您花时间回答我的问题。我现在已经理解了这个概念。 – CloudDweller 2012-02-02 15:22:20