(Fraction *) f is being introduced as an argument in the following "add" method:

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

In some other, hypothetical method, the argument represented by "f" could have been introduced as an integer:

-(void) otherMethod: (int) f;

But in this case, "f" needs to represent the class "Fraction" since it contains the two variables we want: (1) numerator and (2) denominator.

This is represented later, as you've pointed out, as f.numerator and f.denominator when calculating the new numerator and denominator. (Because when the "add" method accepts (Fraction *) f it's really accepting f.numerator and f.denominator.)

If you had called the argument another name, such as "xyz", then you would have to represent the two variables as xyz.numerator and xyz.denominator.

-(void) add: (Fraction *) xyz;

{

numerator = numerator * xyz.denominator + denominator * xyz.numerator;

denominator = denominator * xyz.denominator;

}

Does that help? If not, hopefully someone else can explain it better.

Neil