There are places where pointer casts and unions are necessary and even wholesome, but they should be used carefully and sparingly. A pointer cast tells the compiler to believe you. An incorrect pointer cast might corrupt your heap, scribble into memory owned by other objects, call nonexistent member functions, and cause general failures. It's not a pretty sight. If you're interested in using a pointer cast, use the new style pointer casts.
Some people believe that the purpose of inheritance is code reuse.
In other words, inheritance is mainly a specification technique rather than an implementation technique. Smalltalk lets you make a subtype that isn't a subclass, and allows you to make a subclass that isn't a subtype. Therefore you're usually better off not putting the data structure in a class. This leads to a stronger reliance on abstract base classes . I like to think of the difference between an ATV and a Maseratti.