Constructor inheritance? Why not?
Paulo Pinto via Digitalmars-d
digitalmars-d at puremagic.com
Mon Jun 8 05:47:15 PDT 2015
On Monday, 8 June 2015 at 09:20:06 UTC, Ola Fosheim Grøstad wrote:
> On Monday, 8 June 2015 at 06:35:33 UTC, Jonathan M Davis wrote:
>> On Monday, 8 June 2015 at 06:04:23 UTC, Tofu Ninja wrote:
>>> No its definitely not something that alot of people seem to
>>> care about, but I always found it odd that constructors get
>>> certain special casing like this.
>>
>> I expect that it originally comes down to the fact that
>> constructors aren't polymorphic and _can't_ be polymorphic.
>
> They can if you use type variables. Type variables can be
> virtual too.
>
>> When you override a function, you're overriding the one in the
>> base class and replacing its implementation. You can choose to
>> call the base class' version of the function, but you don't
>> have to. You're dynamically replacing a function.
>
> Conceptually you should. In Simula's successor Beta you had to,
> but you had "inner" inheritance opposed to Simula/C++ "outer"
> inheritance. E.g. the logic of the subclass is executed by the
> superclass. It is much cleaner, actually.
>
>> So, yes, constructors _are_ fundamentally different from other
>> functions. And the inheritance that you get with constructors
>> is not at all what you get when you override a function.
>> They're at most superficially similar. And older languages
>> such as C++98 and Java don't have inherited constructors.
>> They're a relatively new idea.
>
> Let's not rewrite history, shall we? Constructors are not
> fundamentally different from other functions by nature. In
> minimal OO languages there is no significant difference between
> the definition of a class/constructor and a function.
Yep, in Modula-3 and Oberon, one even has to create the VMT
explicitly.
--
Paulo
More information about the Digitalmars-d
mailing list