Weird behavior of "this" in a subclass, I think?

H. S. Teoh via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Jul 15 17:36:11 PDT 2015


On Thu, Jul 16, 2015 at 12:18:30AM +0000, seashell86 via Digitalmars-d-learn 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 :)

The reason is that class variables cannot be overridden, only class
methods can.

If you want to simulate overriding of class variables, you can use a
@property method instead:

	class Animal {
		@property string voice() { return "Wah!"; }
		void speak() { writeln(voice); }
	}

	class Dog : Animal {
		override @property string voice() { return "Whoof!"; }
	}


T

-- 
Indifference will certainly be the downfall of mankind, but who cares? -- Miquel van Smoorenburg


More information about the Digitalmars-d-learn mailing list