Click to See Complete Forum and Search --> : overloading a function in a derived class


afrei
October 11th, 2002, 02:40 AM
Assume the following situation:

class A
{
public:
A();
virtual ~A();

virtual void One();
virtual void One(int w);

virtual void Two();
};

class B : public A
{
public:
B();
virtual ~B();

void One(int w);
void Two(int w);
};

The function call:

B obj;
obj.One();
obj.Two();

results in an error:
function does not accept 0 parameter


The compiler doesn't find the appropirate function in the
base class A. Why??? Any ideas?
Just copying the base class functions to the derived class could not be a good solution, coz I had to edit the code of the derived class whenever I add or change a concerning function to the base class.

Many thanks for help.
Andrea

PS: I work with MS Visual C++ 6.0

villemos
October 11th, 2002, 03:21 AM
You run into the "Hiding Rule".

"Hiding is defined as: If a derived class defines a name which
had been defined in a class that it is inherited from, the
derived class definition will override not overload or override
that name.".

In the specified class you hide the base class function when overloading the functions, i.e. One() and Two() is not defined for B.

You could redefine the functions in the specified class

class B : public A
{
public:
B();
virtual ~B();

virtual void One() {A::One();};
virtual void One(int w);

virtual void Two() {A::Two();};
virtual void Two(int w);
};

villemos.

villemos
October 11th, 2002, 03:31 AM
PS If your lucky, then your compiler supports the keywork "using", which "unhides" the functions. Define B as

class B : public A
{
public:
B();
virtual ~B();

using A::One;
using A::Two;

virtual void One(int w);
virtual void Two(int w);
};

I have never used this, but who knows; It might work! :D

villemos.