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