【发布时间】:2015-11-22 10:09:04
【问题描述】:
问题: 我知道原点是具有 XYPoint 类型的 Rectangle 类的实例变量。源实例变量有另外两个实例变量 x 和 y。没看清楚,矩形类中的if语句是做什么的?
我相信 if (! origin) 表示如果原点不等于零,那么请执行以下操作...原点是否等于零?如果是,它如何等于零以及如何在 if (!origin) 语句中验证。换句话说, if (! origin) 语句是做什么的?
是否存在原点为零的实例?如果发生这种情况,我的代码将如何响应?我知道如果没有 if 语句 myPoint 对象将不会保留其初始值。
我还想知道为什么我们在矩形类中使用类指令而不是导入。它有什么不同。我还注意到我们没有在矩形的实现中导入 XYPoint 标头。如果有人愿意提供帮助,我将不胜感激。非常感谢提前。
注意:请看我下面的代码。
* XYPoint 类
#import <Foundation / Foundation.h>
@interface XYPoint: NSObject
@property int x, y;
-(void) setX: (int) Xval andY: (int) yVal;
@end
#import "XYPoint.h"
@implementation XYPoint
@synthesize x, y;
-(void) setX: (int) Xval andY: (int) yVal
{ x = xVal;
y = yVal;
}
@end
* 矩形类
#import <Foundation/Foundation.h>
@class XYPoint;
@interface Rectangle: NSObject
-(XYPoint *) origin;
-(void) setOrigin: (XYPoint *) pt;
@end
#import "Rectangle.h"
@implementation Rectangle
{
XYPoint *origin
}
-(void) SetOrigin: (XYPoint *) pt
{
if (! origin)
origin = [[XYPoint alloc]init];
origin.x = pt.x;
origin.y = pt.y;
}
-(XYPoint *) origin
{
return origin;
}
@end
Main
#import "Rectangle.h"
#import "XYPoint.h"
int main (int argc, char *argv[])
{
@autoreleasepool {
XYPoint *myPoint = [[XYPoint alloc]init];
[myPoint setX: 100 andY: 200];
myRect.origin = myPoint;
NSLog (@"Origin at (%i, %i)" , myRect.origin.x, myRect.origin.y);
[myPoint setX: 50 andY: 75];
NSLog (@"Origin at (%i, %i)" , myRect.origin.x, myRect.origin.y);
}
@end
Origin at (100, 200)
Origin at (100, 200)
【问题讨论】:
-
你能解释一下你认为正在发生的事情吗
-
如果 (!origin) 确实存在
t means origin is not equal to zero. Means if origin doest。 Origin 是一个指向 Xpoint 对象的指针,问题是如果 origin 不存在,创建并设置 igual 到 pt,可能为零。 -
@OnikIV 谢谢 Onik IV。但是 origin 存在,因为它是矩形类的实例变量。
-
(您可能想赶上 Objective-C 的开发进度,或查找更新的教程。自 Xcode 4.4 起(在大多数情况下)不需要
@synthesize语句:useyourloaf.com/blog/…) -
@Wain 我认为 if 语句检查原点是否没有零值,如果没有,则将其初始化为零。我不确定,因为这对我来说没有意义......
标签: objective-c oop object inheritance