www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Virtual Classes?

reply Engine Machine <EM EM.com> writes:
https://en.wikipedia.org/wiki/Virtual_class

Can D do stuff like this naturally?
Aug 17 2016
next sibling parent Basile B. <b2.temp gmx.com> writes:
On Thursday, 18 August 2016 at 00:49:49 UTC, Engine Machine wrote:
 https://en.wikipedia.org/wiki/Virtual_class

 Can D do stuff like this naturally?
Not naturally. The ancestor must be specified for the inner "virtual class": °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° class Foo { class Internal { void stuff() {} } } class Bar: Foo { class Internal: Foo.Internal { override void stuff() {} } } °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° However the ancestor inner class is well inherited (in the scope of a derived class Internal resolves to the parent definition or to the internal override when applicable). Note that I find the wikipedia example very bad. "Parts" doesn't define anything to override.
Aug 17 2016
prev sibling parent reply Meta <jared771 gmail.com> writes:
On Thursday, 18 August 2016 at 00:49:49 UTC, Engine Machine wrote:
 https://en.wikipedia.org/wiki/Virtual_class

 Can D do stuff like this naturally?
Yes, D's `alias this` feature supports this. https://dlang.org/spec/class.html#alias-this
Aug 17 2016
parent reply Basile B. <b2.temp gmx.com> writes:
On Thursday, 18 August 2016 at 02:51:48 UTC, Meta wrote:
 On Thursday, 18 August 2016 at 00:49:49 UTC, Engine Machine 
 wrote:
 https://en.wikipedia.org/wiki/Virtual_class

 Can D do stuff like this naturally?
Yes, D's `alias this` feature supports this. https://dlang.org/spec/class.html#alias-this
No read carefully, alias this does not the same thing, particularly when the time comes to override the inner type.
Aug 17 2016
parent reply Meta <jared771 gmail.com> writes:
On Thursday, 18 August 2016 at 02:55:49 UTC, Basile B. wrote:
 On Thursday, 18 August 2016 at 02:51:48 UTC, Meta wrote:
 On Thursday, 18 August 2016 at 00:49:49 UTC, Engine Machine 
 wrote:
 https://en.wikipedia.org/wiki/Virtual_class

 Can D do stuff like this naturally?
Yes, D's `alias this` feature supports this. https://dlang.org/spec/class.html#alias-this
No read carefully, alias this does not the same thing, particularly when the time comes to override the inner type.
How doesn't it? You define a member with the same name in the outer class and it'll override the inner one.
Aug 17 2016
parent Basile B. <b2.temp gmx.com> writes:
On Thursday, 18 August 2016 at 03:58:00 UTC, Meta wrote:
 On Thursday, 18 August 2016 at 02:55:49 UTC, Basile B. wrote:
 On Thursday, 18 August 2016 at 02:51:48 UTC, Meta wrote:
 On Thursday, 18 August 2016 at 00:49:49 UTC, Engine Machine 
 wrote:
 https://en.wikipedia.org/wiki/Virtual_class

 Can D do stuff like this naturally?
Yes, D's `alias this` feature supports this. https://dlang.org/spec/class.html#alias-this
No read carefully, alias this does not the same thing, particularly when the time comes to override the inner type.
How doesn't it? You define a member with the same name in the outer class and it'll override the inner one.
You can't call the most derived from a variable that has a lesser derived type: °°°°°°°°°°°°°°°°°°°°°°°° class Foo { Internal internal; class Internal {void stuff() {"base".writeln;}} this() {internal = new Internal;} alias internal this; } class Bar: Foo { void stuff() {"derived".writeln;} } void main(string[] args) { Foo f = new Bar; f.stuff(); // "base", not "derived". } °°°°°°°°°°°°°°°°°°°°°°°°° From what i've read, "virtual classes" respect the OOP principles.
Aug 17 2016