On Thu, 16 Jul 2015 00:18:30 +0000
seashell86 via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com>
wrote:

> So I've been mostly just toying around with D as it seems like it 
> will end up being a strong language for game development both now 
> and even moreso in the future.  That being said, I'm perplexed by 
> using this code and not receiving the result I would imagine. 
> Here is the source code of a basic "sandbox.d" file:
> 
>      import std.stdio;
> 
>      class Animal {
>          string voice;
> 
>          void speak() {
>              writeln(this.voice);
>          }
>      }
> 
>      class Dog : Animal {
>          string voice = "Whoof!";
>      }
> 
>      int main() {
>          auto a = new Animal();
>          auto d = new Dog();
> 
>          a.speak(); // Prints ""
>          d.speak(); // Prints "" instead of "Whoof!"
> 
>          return 0;
>      }
> 
> I know that C++ behaves this way.  However, Dlang impresses me by 
> having a very "no duh" approach to things where this type of 
> example seems very "no duh."  Anyways, please be gentle as I am 
> hardly what most would consider a "skilled" programmer and, as 
> such, was something I wanted to bounce off the pros :)


You can use template this parametr

import std.stdio;

class Animal {
        string voice;

        void speak(this C)() {
                writeln((cast(C)this).voice);
        }
}

class Dog : Animal {
        string voice = "Whoof!";
}

int main() {
        auto a = new Animal();
        auto d = new Dog();

        a.speak(); // Prints ""
        d.speak(); // Prints "Whoof!"

        return 0;
}

Reply via email to