2012-02-02 3 views
1

У меня есть следующий код:Установка значений переменных Objective-C экземпляра

@implementation Fraction 
{ 
     int numerator; 
     int denominator; 
} 

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

Я задавался вопросом, почему вы должны иметь как «п» и «числитель» для числителя? Например, почему вы не можете просто установить

-(void) setNumerator: (int) numerator 

, как проставление на:

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

К сожалению, если это такой основной вопрос, но я начинаю с самого начала, без опыта программирования.

ответ

2

Метод setNumerator используется для указания объекту Fraction, какое значение оно должно содержать в переменной с именем numerator. Как и в разделе «Здесь, г-н Фракция, пожалуйста, используйте значение n для вашего числителя». При реализации этого метода код должен иметь дело с двумя различными понятиями: переменная параметра n, содержащая новое значение, и переменная экземпляра числитель, которая должна быть изменена на значение в n; следовательно, необходимо наличие двух разных имен. Линия

numerator = n; 

буквально означает «скопировать номер в п в переменную числителе

Помните, что есть две половины сделки. Скажем, что я объект Fraction, и вы хотите, чтобы мой числитель был равен 4. Вы говорите: «Установите числитель на 4, или setNumerator (4)», это прекрасно, потому что вы человек, и вы получаете выбрать нужный номер.

Но как скромный объект Objective-C, весь мой код был написан некоторое время в прошлом; это было написано до значения было даже мерцанием в вашем глазу. Поэтому код для setNumerator() должен быть общим; он должен быть написан, чтобы сказать «установить числитель на любое значение, которое хочет человек», - назовите его n ». Помните, моя фактическая переменная числитель скрыт от вас; все, что вы можете сделать, это вызвать мой метод, и мне нужно установить переменную.

Именно поэтому метод должен быть написан для использования абстрактного имени - n - для значения, поскольку, когда метод написан, значение неизвестно.

+0

Ничего себе, что было быстро спасибо. Но я до сих пор неясно, почему должна существовать переменная paramenter и переменная экземпляра. Поскольку числитель был объявлен как (int), и при выполнении метода, который вы даете (int) значение, подобное 4, почему нам нужно сначала дать n значение 4, а затем передать это числителю? – CloudDweller

+0

Я добавил немного ответа; Надеюсь, поможет. –

+0

Я как бы понимаю, что ты имеешь в виду, и я знаю, что его глупость, но я все еще не 100%, почему нужно быть двумя. Мы объявляем как числитель как (int), так и n как (int), поэтому программа знает, что int будет использоваться. Почему числитель ivar скрыт, так как мы не показываем его в интерфейсе? – CloudDweller

0

Я думаю, что концепция, которую вы ищете, называется свойствами. Take a look here и here и here. Свойства позволят вам устанавливать значения элементов без указания имени параметра или вызова метода. Вы просто присваиваете значение свойству.

С вызовом функции вы должны указать параметр, который вы передаете в функцию, чтобы вы могли назначить его члену класса.

+0

Спасибо, что нашли время ответить на мой вопрос. Я понял эту концепцию. – CloudDweller

Смежные вопросы