[comp.lang.c++] overriding/overloading

kanner@Apple.COM (Herbert Kanner) (05/20/89)

This may have already been discussed on the net.  I looked for a
while, but couldn't find a reference to the problem.  Consider the
following:

class B {
public:
	void f();
	void f(int);
};

class D : public B {
public:
	void f(int);
};

foo()
{
	D d;
	d.f();
}

Compilation produces the error message:
# error:  argument  1 of type int  expected for D::f()

What happens is that the overriding is done by name.  The appearance of the
name "f" as a member function of D overrides all overloaded instances
of "f" in the base class.  This fact has been known to me for some
time, but I have not been able to find any published documentation
about it.  What I would like to hear from the AT&T folks is the reason
for this design decision.  Is there a good reason why the overriding
could not have been done argument prototype by prototype, so that
d.f() would call the base class instance without the necessity of
writing B::d.f()?
-- 
Herb Kanner
Apple Computer, Inc.
{idi,nsc}!apple!kanner
kanner@apple.com