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:

    Motion or change, and identity or rest, are the first and second secrets of nature: Motion and Rest. The whole code of her laws may be written on the thumbnail, or the signet of a ring.
    Ralph Waldo Emerson (1803–1882)

    ... 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–?)