Re: Downcasting
Slain wrote:
Need some help with accesing a member function of a derived class in a
multiple inheritance Scenario
I have a case of Multiple Inheritance and lets say something like
A --> B --> C --> D --> E
E inherits from D, Dfrom C and so on.
Nitpick: multiple inheritance is inheriting from multiple base classes. It
is not multiple levels of inheritance!
In E there is this member function
Class E
{
public:
char getValue();
}
In a seperate class "Z", I have a member function, to which a object
pointer of class type A is passed. I need to use this A, to get to the
function defined in E. How do I do that?
Z:: GetNewVal(A *aa)
{
//Now I need to use this aa to access the getValue of Class E.
//Can anyone help me with this
}
Two cases:
1. You guess that 'aa' might point to an 'E'.
2. You know (or assume) that 'aa' points to an 'E'
In the first case, you should check using dynamic_cast. Note that this
requires that 'A' is polymorphic, i.e. has at least one virtual function.
It is enough if that function is the destructor or inherited from a
baseclass.
In the second case, you can just use a static_cast to convert to an 'E*'.
Notes:
* The second case doesn't require a polymorphic type, but if you have one
anyway, I would use "assert(dynamic_cast<E*>(aa));". In debug builds
(without NDEBUG), this makes really sure that your assumption is true.
Note that this could fire if 'aa' was null already.
* You can also use references here to document that 'aa' must not be null.
Take care that dynamic_cast changes its behaviour a bit when casting to a
reference.
Uli
--
Sator Laser GmbH
Gesch?ftsf?hrer: Thorsten F?cking, Amtsgericht Hamburg HR B62 932
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]