private/package methods cannot be virtual
Idan Arye
GenericNPC at gmail.com
Mon May 6 12:55:18 PDT 2013
On Monday, 6 May 2013 at 19:05:04 UTC, deadalnix wrote:
> On Monday, 6 May 2013 at 18:44:07 UTC, Jonathan M Davis wrote:
>> On Monday, May 06, 2013 14:19:12 Henning Pohl wrote:
>>> Documentation:
>>> Member functions which are private or package are never
>>> virtual,
>>> and hence cannot be overridden.
>>>
>>> I was about to write a bug report about this, because in my
>>> code
>>> there are tons of overridden methods which actually should be
>>> private/package. Can anyone tell me why this decision has been
>>> made? To inline them?
>>>
>>> Do I really need to write interfaces to be able to override
>>> these
>>> methods?
>>
>> The decision was made to make member functions virtual by
>> default. As soon as
>> that function was made, there had to be a choice for every
>> access level as to
>> whether it would be virtual or not. public and protected
>> obviously have to be
>> virtual, and in general, there's no real benefit in making
>> private virtual (and
>> there's a definite permorfance cost to programs in general if
>> you do), so it's
>> non-virtual. There's a bit of disagreement with regards to
>> package, but it was
>> decided that it wouldn't be virtual either, as it had nothing
>> to do with
>> inheritance.
>>
>
> If it is private, by definition, the compiler have all override
> available. So it can finalize automatically.
This is usually true with `package` - modules that belong to the
same package are usually compiled together. Ofcourse, unlike
`private` it is possible to add your own module to an existing
package from another library(at least namespace-wise), but I
guess it's not that common.
More information about the Digitalmars-d
mailing list