How to declare a virtual member (not a function) in a class
Petar
Petar
Tue Feb 18 12:58:58 UTC 2020
On Tuesday, 18 February 2020 at 12:37:45 UTC, Adnan wrote:
> I have a base class that has a couple of constant member
> variables. These variables are abstract, they will only get
> defined when the derived class gets constructed.
>
> class Person {
> const string name;
> const int id;
> }
>
> class Male : Person {
> this(string name = "Unnamed Male") {
> static int nextID = 0;
> this.id = nextID++;
> this.name = name;
> }
> }
>
> The compiler restricts me from assigning those two functions.
> How can I get around this?
`const` members must be initialized by the same class that
declares them. What you could do is have the abstract Person
class declare a constructor (which would initialize the `const`
members) and call it from derived class (such as `Male`)
constructors by the `super(arg1, arg2)` syntax.
Alternatively, you could define `abstract` accessor functions in
the base class and have the derived classes implement them. In D
you can use the same syntax to call functions as if they were
fields. (Before you had to put the @property attribute on such
functions, but for the most part it is not necessary now.)
More information about the Digitalmars-d-learn
mailing list