计算/变量返回为零



我正在建立一个基本的几何类,在其中我定义了一个矩形,可以在计算面积和周长的同时操作宽度和高度。除了周长和面积变量返回为零之外,所有操作和输出都很好。我不知道如何在变量本身或@implementation期间正确设置变量,所以我确信它显示的是从变量第一次初始化时(在设置宽度和高度之前)的零。

我对OOP和ObjC缺乏经验,所以我可能会错过一些简单的东西。

#import <Foundation/Foundation.h>
// @interface setup as required.
@interface Rectangle: NSObject
-(void) setWidth: (int) w;
-(void) setHeight: (int) h;
-(int) width;
-(int) height;
-(int) area;
-(int) perimeter;
-(void) print;
@end
// @implementation setup for the exercise.
@implementation Rectangle {
    int width;
    int height;
    int perimeter;
    int area;
}
// Set the width.
-(void) setWidth: (int) w {
    width = w;
}
// Set the height.
-(void) setHeight: (int) h {
    height = h;
}
// Calculate the perimeter.
-(int) perimeter {
    return (width + height) * 2;
}
// Calculate the area.
-(int) area {
    return (width * height);
}
-(void) print {
    NSLog(@"The width is now: %i.", width);
    NSLog(@"The height is now: %i.", height);
    NSLog(@"The perimeter is now: %i.", perimeter);
    NSLog(@"The area is now: %i.", area);
}
@end
int main(int argc, const char * argv[])
{
    @autoreleasepool {
        // Create an instance of Rectangle.
        Rectangle *theRectangle;
        theRectangle = [Rectangle alloc];
        theRectangle = [theRectangle init];
        // Use the designed methods.
        [theRectangle setWidth: 100];
        [theRectangle setHeight: 50];
        [theRectangle print];
    }
    return 0;
}

简短回答:

这样调用对象方法:

 [self perimeter];
 // as in
 NSLog(@"The perimeter is now: %i.", [self perimeter]);

而不仅仅是

 perimeter

它访问具有该名称的变量,而不是调用您定义的方法。

更长的答案:

您的代码中有几点可以改进:

您应该使用属性而不是ivar和方法来获取和设置它们。像这样声明的属性:@property (nonatomic) int width;将为您提供由编译器隐式创建的getter和setter。因此,您可以执行以下任一操作来设置值:

theRectangle.width = 100;
// is the same as:
[theRectangle setWidth:100];

你也可以覆盖你的getter和setter。您还可以创建只读属性,例如

@interface Rectangle: NSObject
@property (nonatomic) int width;
@property (nonatomic) int height;
@property (nonatomic, readonly) int perimeter;
@end
@implementation Rectangle
- (int)perimeter
{
    return self.width * self.height * 2;
}
@end

相关内容

  • 没有找到相关文章

最新更新