Override with function overloads
    jmh530 via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Mon Sep 11 11:15:36 PDT 2017
    
    
  
On Monday, 11 September 2017 at 17:59:25 UTC, nkm1 wrote:
> On Monday, 11 September 2017 at 15:13:25 UTC, jmh530 wrote:
>> I suppose my issue is that final should prevent function 
>> hijacking because I shouldn't be allowed to override string 
>> bar(double d) anyway. It shouldn't be a worry.
>
> It has nothing to do with overriding. Consider:
> [snip]
An interesting example. I'm not sure overriding is the issue so 
most as what is in the overload set. I think foo(int) is not part 
of the overload set yet. The compiler is able to cast the long to 
int and then call the one in class B without needing to look to 
the base class. The behavior is also the same if you use alias 
this (below).
Would there be any problems with final functions of inherited or 
alias this types being included in the overload set?
import std.stdio;
class A {
     final void foo(int) {
         writeln("A.foo(int)");
     }
}
class B {
     A a = new A;
     alias a this;
     final void foo(long)
     {
         writeln("B.foo(long)");
     }
}
void main() {
     B b = new B;
     int n = 1;
     b.foo(n);
}
    
    
More information about the Digitalmars-d-learn
mailing list