【问题标题】:Objective-C, Having trouble properly inheriting ivars to subclasses and methodsObjective-C,无法将 ivars 正确继承到子类和方法
【发布时间】:2012-03-16 11:33:27
【问题描述】:

这里的第一个问题,我已经四处搜索,恐怕我不知道我正在尝试做什么的确切术语 - 如果已经被问到,请不要攻击我.指出正确的方向,我会继续阅读。

我有课:
“形状”(NSObject 的)
“形状”的子类包括:
"circle" 等 - 每个都有各自的 calcArea(calculate area) 方法。

我的子类工作得很好,因为个人获得了“Circle”类来设置 ivars(使用“Shape”中的“Shape”方法并继承它们,然后使用这些方法计算面积。

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


理论:
-蛮力通过在我的主要方法中使用 2 个变量来重置每个子类的每个参数。 这看起来效率很低,但确实有效。

- 使用“id”,基本上使该对象通过每个子类在“Shape”中创建参数,然后循环遍历每个子类,直到全部完成。尝试了几件事,无法弄清楚。

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

-我设计这个程序是错误的。


提前感谢您的帮助!

【问题讨论】:

    标签: objective-c oop methods subclass superclass


    【解决方案1】:

    如果我理解正确的话。在 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”作为变量来启动类,对吗?应该如何在 main 函数中编码呢?
    • id 是指向对象内部结构的指针。您根本不必担心 id - 它由运行时系统在内部使用。
    • 好的,我不担心身份证。我的意思是在我的实际程序中:Shape *s = [[Shape alloc]init]; [s setWidthHeight:5:10]; [s ....];
    • 非常感谢,我会阅读的,如果我有任何问题,我会回来,但我想我对这里的流程有一个真诚的理解。衷心感谢您的耐心等待。
    猜你喜欢
    • 2018-04-05
    • 1970-01-01
    • 2020-11-13
    • 2013-06-13
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多