inheritance problem
Derek Parnell
derek at psych.ward
Thu Apr 26 14:44:57 PDT 2007
On Thu, 26 Apr 2007 20:21:04 +0200, bayo wrote:
> Jari-Matti Mäkelä a écrit :
>> bayo kirjoitti:
>>> Hello, i currently use DMD 1.013 for Windows and i cant compile this code
>>>
>>>
>>> class C1 {
>>> public void add(int i, int j) {}
>>> }
>>>
>>> class C2 : C1 {
>>> public void add(int i) {}
>>> }
>>>
>>> void main() {
>>> C2 c = new C2();
>>> c.add(1, 2);
>>> }
>>>
>>> src\inheritance.d(16): function inheritance.C2.add (int) does not match
>>> parameter types (int,int)
>>>
>>>
>>> I dont use D for a long time, but i dont remember having problem like this?
>>>
>>> So anybody can help me:
>>> *Is there a problem on my code?
>>
>> Yes
>>
>>> *Is it a desired limitation?
>>
>> Yes, this is how inheritance works in D.
>>
>>> *Can i use another version of DMD to remove this problem?
>>
>> No..
>>
>> ..but you can fix this by adding
>>
>> alias C1.add add;
>>
>> to your C2 class.
>>
>
> Realy hard to me to understand this limitation if we can "patch" it with
>
> an alias, but thanks a lot for your fast help, it run well :)
Well "limitation" may be a bit harsh. Inheritance is available but it is
not as automatic as it is in some other languages.
The need for the alias is because D's rules for finding matching functions
is simple (some say simplistic). If it finds a matching name in the current
context it doesn't try to look any further (e.g in the parent class). The
'alias' is the syntax needed to explicitly bring the parent's function's
name into the current context.
In your case above, because C2 contains the name 'add' your 'c.add(1,2)'
stops looking further up the inheritance tree for a matching parameter
signature. But by adding 'alias C1.add add', it includes all the 'add'
functions in C1 into the namespace of C2.
This is how Walter wants D to work so if you have suggested improvements,
you have to convince him. (Good luck <G>)
--
Derek Parnell
Melbourne, Australia
"Justice for David Hicks!"
skype: derek.j.parnell
More information about the Digitalmars-d-bugs
mailing list