www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Bypass the protection level

reply "Namespace" <rswhite4 gmail.com> writes:
Let's say we have these files:

----
module Foo.Graphic.Drawable;

interface Drawable {
	void draw(bool);
}
----

----
module Foo.Graphic.Sprite;

import Foo.Graphic.Drawable;

class Sprite : Drawable {
protected:
	void draw(bool enable) {
		import core.stdc.stdio : printf;

		if (enable)
			printf("draw\n");
		else
			printf("no drawing...\n");
	}
}
----

----
module Foo.Window.Window;

import Foo.Graphic.Drawable;

class Window {
	void draw(Drawable d) {
		d.draw(true);
	}
}
----

I can call draw on Drawable, because it is declared public and I 
cannot call draw on Sprite because it is declared protected (this 
is already a bit weird, why can I redeclare the interface method 
draw as protected?) but I can call the protected draw method from 
Sprite through Drawable. Is this intended?
Mar 11 2015
next sibling parent "Namespace" <rswhite4 gmail.com> writes:
Could it be that this is intentional and has always worked?
Mar 11 2015
prev sibling parent reply =?UTF-8?B?QWxpIMOHZWhyZWxp?= <acehreli yahoo.com> writes:
On 03/11/2015 04:40 AM, Namespace wrote:

 I can call draw on Drawable, because it is declared public and I cannot
 call draw on Sprite because it is declared protected (this is already a
 bit weird, why can I redeclare the interface method draw as protected?)
It is the same in C++.
 but I can call the protected draw method from Sprite through Drawable.
 Is this intended?
As far as I know, yes it's intended and again the same in C++. Ali
Mar 11 2015
parent "Namespace" <rswhite4 gmail.com> writes:
On Wednesday, 11 March 2015 at 15:22:43 UTC, Ali Çehreli wrote:
 On 03/11/2015 04:40 AM, Namespace wrote:

 I can call draw on Drawable, because it is declared public
and I cannot
 call draw on Sprite because it is declared protected (this is
already a
 bit weird, why can I redeclare the interface method draw as
protected?) It is the same in C++.
 but I can call the protected draw method from Sprite through
Drawable.
 Is this intended?
As far as I know, yes it's intended and again the same in C++. Ali
o.O nice to know. Thank you.
Mar 11 2015