Почему переменные экземпляра передаваемого объекта должны быть доступны с помощью точечной нотации? - PullRequest
0 голосов
/ 27 января 2010
-(void) addFractions: (Fraction*) f
{
    numerator = numerator * f.denominator
    + denominator *f.numerator;

    denominator = denominator *f.denominator;
}

// Это цель c-2.0

// это файл .h для .m выше

-(void) addFractions : (Fraction*) f;

Не забывайте, что вы можете обратиться к Фракции, которая является получателем сообщения, его поля: числитель и знаменатель. С другой стороны, вы не можете напрямую обращаться к переменные экземпляра аргумента fthat way. Вместо этого вы должны получить их с помощью apply- добавление оператора точки к f (или отправка соответствующего сообщения f)

Ответы [ 3 ]

2 голосов
/ 27 января 2010

Представьте, что у вас есть две дроби p/q и r/s, которые вы хотите добавить к новой дроби a/b. Что делает каждая строка?

// a = (p * s) + (q * r)
numerator = numerator * f.denominator + denominator * f.numerator;

// b = (r * s)
denominator = denominator *f.denominator;

Вместе у вас есть:

 a    p * s + q * r
--- = -------------
 b        r * s

Это традиционный способ сложения двух дробей с произвольными разными знаменателями. Вот пример - скажем, вы хотели добавить 3/5 и 2/9:

 a    3 * 9 + 2 * 5   27 + 10   37
--- = ------------- = ------- = --
 b        5 * 9          45     45

Проверяя, мы видим, что это действительно правильно .

2 голосов
/ 27 января 2010

Чтобы обе дроби использовать один и тот же знаменатель.

Я имею в виду, a / b + c / d = a d / (b d) + c b / (d b) = (a d + c b) / (b * d).

0 голосов
/ 27 января 2010

a.b (точка b) является синтаксическим сахаром для использования переменных доступа к элементу-члену [a b] или мутаторов [a setb] при использовании в качестве значения l.

Я действительно не понимаю, на что вы жалуетесь; этот код настолько ясен и компактен, насколько это возможно для любого языка. Вот так я бы тоже написал в псевдокоде.

Остальное только математика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...