Re: Call derived class function from base class reference
Javier wrote:
Hello, is this possible?
I have a pure virtual function in the base class (to force the
programmers of the derived classes to have this function implemented)
but I want to call the derived class function from a base class
reference:
class A
{
public:
virtual void function() = 0;
};
class B
:
public A
{
public:
void function() { cout << "Hello" << endl; };
}
;
You've missed a semicolon.
int main()
{
B derived();
'derived' here is a function. Drop the parentheses.
A &base = dynamic_cast<A &>(B); // don't now if this is the way
Of course this is not correct. First of all, if you have dropped
the parentheses, you _could_ do
A &base = dynamic_cast<A&>(derived);
but you don't need to, the conversion is _implicit_:
A &base = derived;
base.function(); // I need this type of call because I dont't
know the derived class type at runtime.
That should work OK, after you fix the declarations.
}
Of course I could have a function2 (private) and make it pure virtual,
and then have function() in base class calling the virtual function2:
class A
{
public:
void function() { this->function_impl() };
protected:
virtual void function_impl() = 0;
};
class B
:
public A
{
protected:
void function_impl() { cout << "Hello" << endl; };
}
;
int main()
{
B derived();
A &base = dynamic_cast<A &>(B);
A.function();
}
Is this good?
That's just as OK, given that you fix the declarations and get
rid of the dynamic_cast.
But... can I do it the first way?
Should be OK.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask