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