• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: How to force a message to a overriding method from within an init method
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: How to force a message to a overriding method from within an init method


  • Subject: Re: How to force a message to a overriding method from within an init method
  • From: Andreas Grosam <email@hidden>
  • Date: Wed, 18 Feb 2009 23:55:50 +0100


On Feb 12, 2009, at 2:31 AM, João Varela wrote:

João,

Hi all

I am porting most of my C++ code into Objective C and at the moment I have this problem:

In C++ to force a constructor to call a overriding method of a subclass I used pure virtual functions defined in an abstract (super) class.

hopefully it's not too late already, but I have to say that your code in C++ will not work as you expect.
Actually, if your virtual function in the base class is pure, you (should) get a linker error.


Fortunately, the behavior is well defined in the Standard. For more information please read:
http://www.research.att.com/~bs/bs_faq2.html#vcall


or read "polymorphic behavior of an object under construction" in the C ++ Standard:

Member functions, including virtual functions, can be called during construction or destruction. When a virtual function is called directly or indirectly from a constructor, and the object to which the call applies is the object under construction, the function called is the one defined in the constructor's own class or in one of its bases, but not a function overriding it in a class derived from the constructor's class.


Regards Andreas



An example:

class Foo
{
	Foo();
	virtual read( x, y ) = 0; // pure virtual
};

class Bar : public Foo
{
	Bar();

	virtual Read( x, y ); 	// implemented in the subclass
};

// Foo constructor
Foo::Foo()
{
	Read( x, y ); // <-- this calls Bar::Read and not Foo::Read
		      // because the latter is pure virtual
}

I know that the closest thing to a pure virtual function in Objective C is a formal protocol. My question is: can you implement such a behavior in objective C with a formal protocol?

Related to this, what method gets called inside the init method of the superclass: a) the superclass method? or b) the overriding method if there is one?

Although this is not strict Cocoa code, I think this is the best place to ask this kind of question. Sorry for the mild "OT-ness" of my question.

TIA

JV



_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden

_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


References: 
 >How to force a message to a overriding method from within an init method (From: João Varela <email@hidden>)

  • Prev by Date: Re: Running out of memory on stack in C++ routine invoked within Cocoa NSOperation
  • Next by Date: Memory Leak, part I
  • Previous by thread: Re: How to force a message to a overriding method from within an init method
  • Next by thread: Re: How to force a message to a overriding method from within an init method
  • Index(es):
    • Date
    • Thread