0

对于 Objective-C 编程世界,我是一个完全的“菜鸟”,我遇到了各种各样的绊脚石。前几天我刚拿到 Stephen G. Kochan 的“Objective-C 编程,第 4 版”,并且一直在完成练习,其中包括创建 Fraction 类。好吧,作为我自己,我决定看看是否可以通过添加用于加法、减法、乘法和除法的方法来做一些超出本教程范围的“高级”修补。而且,我遇到了一些我还不知道该怎么做的事情......(1)调用带有(和不带)参数的类方法,以及(2)将它们的返回值分配给与返回相同类型的变量。引用的方法应该返回整数(int)输入数字,但由于某种原因,我在两个赋值语句上都收到错误:“不兼容的指针到整数转换...等”。一直把我的头撞在墙上一个小时。我究竟做错了什么?这是相关方法的代码:

-(void) add: frac1:(Fraction *) f1: (Fraction *) f2 
{ 
   int n1 = [Fraction: getNumerator()];
   int d1 = [Fraction: getDenominator()];
   // rest of method not yet written
}

——安迪·H。

4

3 回答 3

1
int n1 = [Fraction getNumerator];
int d1 = [Fraction getDenominator];

不需要分号或括号。

一个方法是这样的:

[ClassName methodName:paramater nextParam:param2];

等等参数名称...

另外:您的方法声明也是错误的:

-(void) addfrac1:(Fraction *) f1 withF2:(Fraction *) f2 

摆脱add:and f1:

于 2012-08-09T21:58:49.220 回答
1

我将尝试冒着被否决的愤怒的风险并间接回答这个问题。

首先 - 在一个类中实现加法的常用方法是提供一种方法来给自己添加一些东西。因此,与其提供一个添加两个分数的方法,不如尝试提供一个将分数添加到自身并将结果作为新的 Fraction 对象返回的方法。

其次 -get在方法名称中使用通常用于表示间接返回对象和值的方法 - 如可可编码指南中所述

最好只使用 @properties 作为分子和分母,而不是编写自己的访问器。

所以,IMO - 你的方法可能是:

- (Fraction *)addFraction:(NSFraction *)fraction {
    NSInteger numerator = self.numerator + fraction.numerator;
    NSInteger denominator = self.denominator + fraction.denominator;

    return [[NSFraction alloc] initWithNumerator:numerator andDenominator:denominator];
}

当然,这假设您具有相关属性和启动器。

于 2012-08-09T22:10:38.637 回答
0

您误解了如何声明一个 Objective-C 方法。你输入了这个:

-(void) add: frac1:(Fraction *) f1: (Fraction *) f2

以下是编译器如何解释它。add:::它看到一个带有三个参数的选择器(方法名) 。第一个参数名为frac1。第二个参数名为f1。第三个参数名为f2。由于您没有为frac1参数提供类型,因此编译器假定类型id(可以引用任何对象)。所以就像你输入了这个:

- (void)add:(id)frac1 :(Fraction *)f1 :(Fraction *)f2

您可以像这样调用该方法:

id something;
Fraction *fraction1;
Fraction *fraction2;
[myCalculator add:something :fraction1 :fraction2];

但这可能不是你想要的。

我认为你想要做的是这样声明你的方法:

- (void)addFraction:(Fraction *)f1 toFraction:(Fraction *)f2;

然后你可以这样称呼它:

Fraction *fraction1;
Fraction *fraction2;
[myCalculator addFraction:fraction1 toFraction:fraction2];

如果Fraction是一个 Objective-C 类,那么在你的addFraction:toFraction:方法中,你会想要发送你的参数消息来获取它们的分子和分母,像这样:

int n1 = [f1 numerator];
int d1 = [f1 denominator];
于 2012-08-09T22:05:10.527 回答