Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/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
Objective-C,很难将IVAR正确地继承到亚类和方法_Objective C_Oop_Methods_Subclass_Superclass - Fatal编程技术网

Objective-C,很难将IVAR正确地继承到亚类和方法

Objective-C,很难将IVAR正确地继承到亚类和方法,objective-c,oop,methods,subclass,superclass,Objective C,Oop,Methods,Subclass,Superclass,这里的第一个问题,我已经四处搜索过了,恐怕我不知道我想做什么的确切术语-如果已经有人问过,请不要攻击我。给我指出正确的方向,我会仔细阅读 我有课: “形状”(对象的形状) “形状”的子类包括: “圆”等-各有其各自的面积(计算面积)方法 我的子类工作得很好,因为每个人都让类“Circle”设置IVAR(使用“Shape”中的“Shape”方法并继承它们,然后使用它们计算面积) 我想做的是: 我希望能够为一个“形状”对象设置参数。然后我希望这些参数向下延伸到每个子类(“圆”、“三角形”等),这样我

这里的第一个问题,我已经四处搜索过了,恐怕我不知道我想做什么的确切术语-如果已经有人问过,请不要攻击我。给我指出正确的方向,我会仔细阅读

我有课:
“形状”(对象的形状)
“形状”的子类包括:
“圆”等-各有其各自的面积(计算面积)方法

我的子类工作得很好,因为每个人都让类“Circle”设置IVAR(使用“Shape”中的“Shape”方法并继承它们,然后使用它们计算面积)

我想做的是: 我希望能够为一个“形状”对象设置参数。然后我希望这些参数向下延伸到每个子类(“圆”、“三角形”等),这样我就可以输入两个参数,它可以为我提供每个子类的所有面积和周长计算。例如,每个子类的方法都是相同的“Calcrea”


理论:
-在我的main方法中使用2个变量来重置每个子类的每个参数。这看起来效率很低,但很有效。

-使用“id”,基本上是让这个对象通过每个子类创建“形状”参数,然后在每个子类中循环,直到完成所有操作。尝试了一些方法,但无法解决。

-在“形状”中创建一个对象,然后执行其子类的每个功能-从我所读的内容来看,这听起来很糟糕,超类不应该知道它们的子类做什么…我可以在“形状”中创建一个执行[myCircle Calcrea]和[myTriangle Calcrea]的方法吗?

-我把这个程序设计错了



提前感谢您的帮助!

如果我理解正确的话。在OOP中,子类继承其超类的所有属性。因此,当您:

@interface Shape : NSObject {
     int _mParam;
}
-(int) calcArea;
@end
您实际上可以访问子类中的_mParam。然后创建子类:

@interface Circle : Shape {
}
-(id) init:(int) param;
-(int) calcArea;
@end

-(id) init:(int) param {
    ....
    _mParam = param;
    ....
}

-(int) calcArea {
    //some calculations here
    return M_PI*r*r + _mParam;
}

因此,如果我理解正确,我可以在超类中创建方法,然后在超类中实际定义并启动它。-这对我来说很有意义,但是id在这个实例中是如何工作的?它似乎是用“param”启动类的变量正确吗?应该如何在主函数中进行编码?id是指向对象内部结构的指针。您根本不应该担心id-它由运行时系统内部使用。好的,我不担心id。我的意思是在我的实际程序中:Shape*s=[[Shape alloc]init];[s setWidthHeight:5:10];[s….];非常感谢,我会仔细阅读,如果还有任何问题,我会回来,但我认为我对这里的过程有着真诚的理解。我衷心感谢您的耐心。