Re: Polymorphism and inheritance
Bart Friederichs <bf@tbwb.nl> wrote:
I created the following inheritance:
class Parent {
public:
void foo(int i);
};
class Child : public Parent {
public:
void foo(int i, int i);
};
The following code fragment does not work (it doesn't compile, g++
complains about 'no matching function call for Child::foo(int)':
...
Child c;
int k = 0;
c.foo(k);
...
I assumed that by inheriting the base class, the 'Child' class would
have two 'foo' methods, with different parameters. Apparently not.
It does, but the client code can't see the Parent::foo(int)
member-function because it is blinded by the child's foo(int, int)
function.
Adding
void foo(int i) { Parent::foo(i); }
to the Child class, fixes it, but is that how it should be done?
"using foo;" would also work.
Why is the Parent's foo() not polymorphised-inherited by Child?
Polymorphism isn't involved (note, no use of the word 'virtual' in the
code...
The child does inherit the foo(int) method, as witnessed by this code:
Child c;
Parent* p = &c;
p->foo(k);
it's just that the compiler stops looking after it finds a 'foo'
identifier in the first place it looks. "using foo;" tells it to keep
looking.