digitalmars.D.learn - Without multiples inheritance, how is this done?
- Jack (45/45) May 08 2021 let's say I have:
- matheus (12/19) May 08 2021 What about this model:
- Adam D. Ruppe (4/19) May 08 2021 You can change that from abstract class to `mixin template`, make
let's say I have: ```d class Base { int f() { doSomething(); return n * 5; } void doSomething() { } } class Foo : Base { void myMethod() { /* ... */ } } class Baa : Base { void myMethod2() { /* ... */ } } ``` then I'd like to make a extended version(making those DRY routines a class itself) of Foo and Baa, like this: ```d abstract class DRY : Base { this(int n) { this.n = n; } override int f() { super.doSomething(); return n; } private int n; } ``` but the class ExtendFoo and ExtendedBaa must inherit from Foo and Baa, respectively. But how can I make it inherit the routines from DRY class too without multiples inheritance? in C++ I'd just do: ```d class ExtendedFoo : DRY, Base { /* ... */ } class ExtendBaa : DRY, Base { /* ... */ } ```
May 08 2021
On Saturday, 8 May 2021 at 18:33:35 UTC, Jack wrote:... but the class ExtendFoo and ExtendedBaa must inherit from Foo and Baa, respectively. But how can I make it inherit the routines from DRY class too without multiples inheritance? in C++ I'd just do: class ExtendedFoo : DRY, Base { /* ... */ } class ExtendBaa : DRY, Base { /* ... */ }What about this model: class baseFoo{ // Implement foo stuff } class baseFooBar : baseFoo{ // Implement bar stuff } class FooBar : baseFooBar{ // Do your FooBar thing! } Matheus.
May 08 2021
On Saturday, 8 May 2021 at 18:33:35 UTC, Jack wrote:```d abstract class DRY : Base { this(int n) { this.n = n; } override int f() { super.doSomething(); return n; } private int n; } ```You can change that from abstract class to `mixin template`, make Foo and Baa be `interface`, then use `mixin DRY;` inside your child class.
May 08 2021