What is the design reasons for Not considering base class overloaded
Matthew Ong
ongbp at yahoo.com
Thu May 26 23:03:51 PDT 2011
On 5/25/2011 5:43 PM, bearophile wrote:
>> alias A.foo foo; // ### Why the extra steps is needed for the compiler
>> to 'know' overloaded functions from base classes?
>
> Others have already answered. I also suggest you to compile your code using the -w switch when possible.
>
> Bye,
> bearophile
>That is to prevent silently changing the program's behavior. b.foo(1)
>could happily be a call to B.foo(long) today. Imagine one of the base
>classes changed and now there is A.foo(int). Then our b.foo(1) would
>silently start calling that new function. That would cause a tough bug.
>Ali
Ok.. Just to protect a auto promotion error from a base class.
Would not it be a better keyword such as:
class A{
// assuming there is a new keyword of noinherit
noinherit void foo(int x){} // all other method can be inherited in
A except for this class
}
If such an AliasDeclaration is not used, the derived class's functions
completely override all the functions of the same name in the base
class, even if the types of the parameters in the base class functions
are different. If, through implicit conversions to the base class, those
other functions do get called, an std.HiddenFuncError exception is raised: ?
What is the default encapsulations of a class functions?
(public/private/package...)
I assume that the example shown here are public because they are used in
function bar?
How about when the inheritance tree becomes deeper than 4? And more and
more overloaded functions are in different classes?
Does it mean we have to do more alias at child class at the
bottom?<<MORE hard to solve issues.
If I am not mistaken, in C++/Java. They will choose the most bottom up
closes parameter type signature match.
--
Matthew Ong
email: ongbp at yahoo.com
More information about the Digitalmars-d-learn
mailing list