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

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


On 08/30/2011 07:06 PM, Steven Schveighoffer wrote:
> On Tue, 30 Aug 2011 12:55:30 -0400, Timon Gehr <timon.gehr at gmx.ch> wrote:
>
>> 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 that's no different from implementing an interface, or an abstract
> class that does not implement an interface completely -- copy the vtable
> and overwrite the entries.

interfaces don't possess an own vtable. It is created from scratch for 
each class implementing the interface.




More information about the Digitalmars-d mailing list