Marianne Gagnon wrote:
I'm admittedly not a D expert, and have not written compilers; but the first 
thing that came to my mind is that the second fun() you posted was not an 
override, but overload. i.e. the same as the following, except with inheritance 
:

print(int a) { /* ... */ }
print(float a) { /* ... */ }
print(string a) { /* ... */ }

Inheritance makes all the difference. Consider:

B b = new B;
A a = b;
auto c1 = b.clone();
auto c2 = a.clone();

Both calls go to the same method, although c1 and c2 have different types.

Now the main question, IMO, is : how will the compiler differenciate whether 
you want to override or overload? Would that change prevent overloading methods 
with different signatures?

The rule is simple - for overriding to happen, you must (1) use the override keyword, (2) have the result type a subtype of the result type of the overridden method, and (3) have the parameter types supertypes of the respective parameter types of the overriden method.


Andrei

Reply via email to