Why no * under polymorphism for superclass?

Discussion in 'Mac Programming' started by zippyfly, Mar 26, 2008.

  1. macrumors regular

    Mar 22, 2008
    Hello. Need some help from the ObjC pros.

    id generalData;
    SpecificA *spec1 = [SpecificA new];
    SpecificB *spec2 = [SpecificB new];

    generalData = spec1;
    generalData = spec2;

    QUESTION: Why is it not

    id *generalData;

    missing the dereferencing operator *???

    Aren't all objects in ObjC really just pointers to struts? And therefore, the id "superclass" type should have generalData declared as a pointer, no?

    Quite Confused.
  2. macrumors 601


    Jan 6, 2004
    Western US
    id already is implicitly a pointer by definition, so you don't need to add the pointer specifier. I personally think they shouldn't have built it in (hidden it), and instead forced you to type id *myThing, as I think it would be more clear. But just read it as "id *" when you see it.
  3. thread starter macrumors regular

    Mar 22, 2008
    Thanks! Phew. You have no idea how much you helped clear up. It is really confusing for a beginner.

    You are right, it should have been implemented to be declared specifically. After all, a lot of the syntax is supposed to force us to be clear about things and for the compiler to help check stuff at compile time.

    I wonder if I can still use * without a compiler error? (Will try it later with gcc).

    Actually, do you (or anyone else) have any general guideline about when to use * and when not to? (I still have not grokked a "golden rule" yet about this).

    I know about using * to dereference, etc. a-la standard C; I am just sometimes confused why we use * and sometimes not, when dealing with objects.

    I figured that anything inside the [brackets] is ObjC helping to "pre-process" the OOP stuff, so we don't use * inside the brackets, but outside of them, it sometimes gets confusing since there seem to exceptions to rules (as in the abovementioned original problem I had).


Share This Page