inheriting constructos
Sean Kelly
sean at invisibleduck.org
Mon Nov 30 11:40:01 PST 2009
Michel Fortin Wrote:
> On 2009-11-29 18:03:40 -0500, Andrei Alexandrescu
> <SeeWebsiteForEmail at erdani.org> said:
>
> > Walter and I just discussed the matter of inheriting constructors. Our
> > thought on the issue:
> >
> > a) If a class doesn't define any constructors and adds no fields,
> > inherit constructors. Example:
> >
> > class MyException : Exception {}
> >
> > b) If a class defines at least one constructor, do not inherit constructors.
> >
> > c) If a class doesn't define any constructors but does add at least a
> > non-static field -> undecided.
> >
> > What do you think?
>
> Objective-C has 'a' and 'c' acting like 'a'. There's no 'b' though, and
> this is a small annoyance, as "constructors" in Objective-C are just
> normal methods with a name that starts with "init".
>
> Personally, I'd say adding a field to a class shouldn't affect its
> constructor. If you need to initialize the field at object's
> construction, then you add a constructor. But otherwise, if you don't
> need to initialize it at construction (which happens fairly often when
> fields are zeroed anyway), then you can certainly inherit super's
> constructors.
>
> In fact, I find it hard to see a justification for making adding a
> field break constructor inheritance. My experience with Objective-C
> tells me that 'c' acting like 'a' wouldn't be a problem at all because
> D, just like Objective-C, initializes all fields to a default value
> anyway. You only need a constructor when you want a non-default value
> in a field.
I would hope that explicit out-of-ctor initialization would be allowed too:
class A : B
{
// inherit B's ctors
int x = 5;
}
Are there any instances where that calls an invisible ctor instead of just altering the init blob?
More information about the Digitalmars-d
mailing list