Array of subclasses

Maxim Fomin via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Oct 22 05:24:03 PDT 2015


On Thursday, 22 October 2015 at 11:02:05 UTC, DarkRiDDeR wrote:
>
> This variant works strangely. Example:
>
> abstract class Addon
> {
> 	public string name = "0";
> }
> class Users: Addon
> {
> 	override
> 	{
> 		public string name = "USERS";
> 	}
> }
> static final class Core
> {
> 	static:
> 		public Addon[] activated;
> 		public Users users;
> 		
> 		public void activate()
> 		{
> 			users = new Users;
> 			activated = [new Users, new Users];
> 		}
> }
>
> Core.activate();
> writeln(Core.users.name ~ "\n"  ~ Core.activated[1].name);
>
> Out:
> USERS
> 0

First of all, the code does not compile with override. It is 
impossible to override a data. Override should be removed.
The reason it works this way is that the first access is to base 
class data while the second is to the derived data member.


More information about the Digitalmars-d-learn mailing list