method returning child, doesn't overrides declared method returning parent

Timon Gehr timon.gehr at gmx.ch
Tue Aug 30 09:55:30 PDT 2011


On 08/30/2011 06:23 PM, Steven Schveighoffer wrote:
> On Tue, 30 Aug 2011 12:18:32 -0400, Timon Gehr <timon.gehr at gmx.ch> wrote:
>
>> On 08/30/2011 06:00 PM, Steven Schveighoffer wrote:
>>> On Tue, 30 Aug 2011 11:58:43 -0400, Timon Gehr <timon.gehr at gmx.ch>
>>> wrote:
>>>
>>>> On 08/30/2011 05:49 PM, Christophe wrote:
>>>>> The fact that the code compile only if all interface methods are
>>>>> implemented does not imply that the programmer knows which method he
>>>>> implemented hooks and which does not.
>>>>
>>>> interface I{
>>>> void method();
>>>> }
>>>>
>>>> class C: I{
>>>> void method() {} // not a hook.
>>>> }
>>>
>>> Why not? All a "hook" is is adding an entry into a base class' vtable.
>>> This is no different, it's just the base "class" is an interface.
>>>
>>> -Steve
>>
>> As far as I can tell, a hook is overwriting an existing entry.
>
> Nothing is "overwritten", what's written into the table is decided at
> compile-time.
>
> -Steve

It is conceptually "overwritten" at compile time: Copy vtable from 
parent and replace the overriden entries.

And I am quite certain that what exactly is in the table is actually 
decided at link time.


More information about the Digitalmars-d mailing list