Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


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

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.

 

 

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