Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Language: C++
Expertise: Advanced
May 11, 1999



Building the Right Environment to Support AI, Machine Learning and Deep Learning

Perform Cross Casts Properly

A cross cast converts a multiply-inherited object to one of its secondary base classes. To demonstrate what a cross cast does, consider this class hierarchy:
struct A
  int i;
  virtual ~A () {}  
struct B
  bool b;

struct D: public A, public B
  int k;
  D() { b = true; i = k = 0; } 

A *pa = new D;
B *pb = dynamic_cast<B*> pa;  //cross cast; convert to the second base class
The static type of pa is "pointer to A", whereas its dynamic type is "pointer to D". A simple static_cast cannot convert a "pointer to A" into a "pointer to B" because A and B are unrelated (your compiler issues an error message in this case). To perform the cross cast properly, the value of pb has to be calculated at run time. After all, the cross cast can appear in a source file that doesn't even know that class D exists. To get the cross cast done properly, a dynamic cast is required, as shown in the example.
Danny Kalev
Comment and Contribute






(Maximum characters: 1200). You have 1200 characters left.



Thanks for your registration, follow us on our social networks to keep up-to-date