Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class 如何将参数属性化到C4中的子类_Class_Variables_Object_Attributes_C4 - Fatal编程技术网

Class 如何将参数属性化到C4中的子类

Class 如何将参数属性化到C4中的子类,class,variables,object,attributes,c4,Class,Variables,Object,Attributes,C4,我试图创建一个子类对象,它的大小可以在我声明它时确定。例如,做一些接近“circle(int-width,int-height)”的事情,并在C4WorkSpace中,指定两个定义圆大小的数字。如果我理解正确,您可以使用初始值设定项,如下所示: - (id) initWithNumber: (int) n { self = [super init]; ❶ ❷ if (self) { self->_number = n; ❸ } return

我试图创建一个子类对象,它的大小可以在我声明它时确定。例如,做一些接近“circle(int-width,int-height)”的事情,并在C4WorkSpace中,指定两个定义圆大小的数字。如果我理解正确,您可以使用初始值设定项,如下所示:

- (id) initWithNumber: (int) n {
    self = [super init]; ❶ ❷
    if (self) {
        self->_number = n; ❸
    }
    return self; ❹
}
…但我不太明白如何使用它以及放在哪里

这是我正在使用的代码。我在椭圆的参数中插入了“size”,只是为了说明我要做的事情。 我的circle.h文件:

#import "C4Shape.h"

@interface circle : C4Shape

@end
还有圆。我是一个:

#import "circle.h"

@implementation circle

-(void) setup
{
    [self addGesture:PAN name:@"pan" action:@"move:"];
    [self addGesture:TAP name:@"tap" action:@"changeColour"];
    [self ellipse:CGRectMake(0, 0, size, size)];
    [self setFillColor:[UIColor blackColor]];
    [self setStrokeColor:[UIColor blackColor]];
}

-(void) changeColour
{
    self.fillColor = [UIColor colorWithRed:[C4Math randomInt: 100]/100.0f green:[C4Math randomInt: 100]/100.0f blue:[C4Math randomInt: 100]/100.0f alpha:1.0f];
}

@end
在本例中,将变量赋给C4中的子类的最佳方法是什么?如果可能的话,你能解释一下我是如何在C4WorkSpace.m中创建对象的吗


谢谢你的关注。如果我不清楚,很抱歉。

你可以这样做。您必须将初始值设定项方法声明到头文件中,以便其他文件看到它。您需要创建一个名为
size
的实例变量,并将其设置为您的数字。或者,您可以使用一个。您可以在Cirlce.m文件中提供定义。我已经将self->size更改为just size,因为它是类中的一个实例变量

C4Workspace.m
中,需要导入头文件,然后才能在文件中的任何位置创建一个对象。您需要调用
alloc
,然后调用
initWithNumber
来创建对象。您必须调用
setup
,才能让它显示在屏幕上,因为您提供了所有代码

查看相关讨论

圆圈.h

#import "C4Shape.h"

@interface Circle : C4Shape

- (id) initWithNumber: (int) n;

@end
圆圈.m

#import "Circle.h"

@implementation Circle
{
     int size;
}

- (id) initWithNumber: (int) n {
    self = [super init];
    if (self) {
        size = n;
    }
    return self;
}

-(void) setup
{
    [self addGesture:PAN name:@"pan" action:@"move:"];
    [self addGesture:TAP name:@"tap" action:@"changeColour"];
    [self ellipse:CGRectMake(0, 0, size, size)];
    [self setFillColor:[UIColor blackColor]];
    [self setStrokeColor:[UIColor blackColor]];
}

-(void) changeColour
{
    self.fillColor = [UIColor colorWithRed:[C4Math randomInt: 100]/100.0f green:[C4Math randomInt: 100]/100.0f blue:[C4Math randomInt: 100]/100.0f alpha:1.0f];
}

@end
#import "C4Shape.h"

#import "C4WorkSpace.h"
#import "Circle.h"

@implementation C4WorkSpace
{
    Circle * c;
}

-(void)setup
{
    c = [[Circle alloc] initWithNumber:100];
    [c setup];

    [self.canvas addSubview:c];
}

@end
C4Workspace.m

#import "Circle.h"

@implementation Circle
{
     int size;
}

- (id) initWithNumber: (int) n {
    self = [super init];
    if (self) {
        size = n;
    }
    return self;
}

-(void) setup
{
    [self addGesture:PAN name:@"pan" action:@"move:"];
    [self addGesture:TAP name:@"tap" action:@"changeColour"];
    [self ellipse:CGRectMake(0, 0, size, size)];
    [self setFillColor:[UIColor blackColor]];
    [self setStrokeColor:[UIColor blackColor]];
}

-(void) changeColour
{
    self.fillColor = [UIColor colorWithRed:[C4Math randomInt: 100]/100.0f green:[C4Math randomInt: 100]/100.0f blue:[C4Math randomInt: 100]/100.0f alpha:1.0f];
}

@end
#import "C4Shape.h"

#import "C4WorkSpace.h"
#import "Circle.h"

@implementation C4WorkSpace
{
    Circle * c;
}

-(void)setup
{
    c = [[Circle alloc] initWithNumber:100];
    [c setup];

    [self.canvas addSubview:c];
}

@end

非常感谢你,亚当!我现在明白了初始值设定项!