dynamic_cast

From Seo Wiki - Search Engine Optimization and Programming Languages
Jump to navigationJump to search

In the C++ programming language, the dynamic_cast operator is a part of the run-time type information (RTTI) system that performs a typecast. However, unlike an ordinary C-style typecast, a type safety check is incurred at runtime, and it will either throw an exception (when dealing with references) or return a null pointer (when dealing with pointers) if the types are not compatible. Thus, dynamic_cast behaves more like a typecast in a programming language such as Java, rather than the C-style casting which performs no runtime check.

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 actually an instance of B, a subclass of A. This can be accomplished using dynamic_cast as follows.

<source lang="cpp">

  1. include <typeinfo> // For std::bad_cast
  2. include <iostream> // 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<B&>(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; } } </source>

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

<source lang="cpp"> void my_function(A* my_a) { B* my_b = dynamic_cast<B*>(my_a);

if (my_b != 0) my_b->methodSpecificToB(); else std::cerr << "This object is not of type B" << std::endl;


} </source>

See also

External links

fr:Dynamic cast it:Dynamic cast ru:Dynamic cast

If you like SEOmastering Site, you can support it by - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 and more...