Re: What the hell is dynamic_cast for?
On May 29, 4:16 pm, "lovecreatesbea...@gmail.com"
<lovecreatesbea...@gmail.com> wrote:
On May 29, 4:13 pm, James Kanze <james.ka...@gmail.com> wrote:
On May 29, 3:49 am, "lovecreatesbea...@gmail.com"
<lovecreatesbea...@gmail.com> wrote:
On May 29, 1:46 am, Juha Nieminen <nos...@thanks.invalid> wrote:
dynamic cast actually checks that the object is of that
type, and if it isn't, it returns a null pointer. You can
check the returned pointer to see if the cast was
successful. (With static_cast you probably just get a
segmentation fault.)
``is of that type'' means that
dynamic_cast<T>(pointer);
(*pointer) is declared as T or T's derived classes, right?
This cast fails if (*pointer) is declared as T's parent
classes or other un-related classes. Am I right?
I'm not too sure I understand. If pointer is of type Derived*,
dynamic_cast< Base* >( pointer ) always succeeds, of course,
returning a pointer to the Base sub-object of the Derived. If
pointer is of type Base*, dynamic_cast< Derived* >( pointer )
will return a null pointer if the actual object doesn't contain
an unambiguous Derived in its inheritance hierarchy, and a
pointer to the Derived if it does.
Suppose there are three classes: Base, Child, GrandChild are
polymorphic classes. Child is derived from Base, and
GrandChild from Child.
Public derivation, or private? And does Base have at least one
virtual function?
I think only the dynamic_cast in ``Case 1'' fails, am I right?
Base *pB, *p;
Child *pC;
GrandChild *pG;
/* pB, pC, pG, proper initialization .. */
// Case 1
p = pB; // legal up-cast
pC = dynamic_cast<Child*>(p); // illegal dynamic-cast
// Case 2
p = pC; // legal up-cast
pC = dynamic_cast<Child*>(p); // legal dynamic-cast
// Case 3
p = pG; // legal up-cast
pC = dynamic_cast<Child*>(p); // legal dynamic-cast
If I suppose public derivation in all cases, and that Base has
at least one virtual function, all of the casts are "legal".
The first will result in a null pointer, and the others to a
pointer to the correct (sub-)object.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34