Dynamic Cast - Example Code

Example Code

Suppose some function takes an object of type A as its argument, and wishes to perform some additional operation if the object passed is an instance of B, a subclass of A. This can be accomplished using dynamic_cast as follows.

#include // For std::bad_cast #include // For std::cerr, etc. class A { public: // Since RTTI is included in the virtual method table there should be at least one virtual function. virtual void foo; // other members... }; class B : public A { public: void methodSpecificToB; // other members. }; void my_function(A& my_a) { try { B& my_b = dynamic_cast(my_a); my_b.methodSpecificToB; } catch (const std::bad_cast& e) { std::cerr << e.what << std::endl; std::cerr << "This object is not of type B" << std::endl; } }

A similar version of my_function can be written with pointers instead of references:

void my_function(A* my_a) { B* my_b = dynamic_cast(my_a); if (my_b != NULL) my_b->methodSpecificToB; else std::cerr << "This object is not of type B" << std::endl; }

Read more about this topic:  Dynamic Cast

Famous quotes containing the word code:

    Hollywood keeps before its child audiences a string of glorified young heroes, everyone of whom is an unhesitating and violent Anarchist. His one answer to everything that annoys him or disparages his country or his parents or his young lady or his personal code of manly conduct is to give the offender a “sock” in the jaw.... My observation leads me to believe that it is not the virtuous people who are good at socking jaws.
    George Bernard Shaw (1856–1950)

    ... the self respect of individuals ought to make them demand of their leaders conformity with an agreed-upon code of ethics and moral conduct.
    Mary Barnett Gilson (1877–?)