I am researching the same problem.
I would like to be able to say:
class2 *ptr2 = (class2*)ptr1;
rather than:
class2 *ptr2 = dynamic_cast<class2*>(ptr1);
and override it with both the dynamic cast and the assert.
However, I can not find a way to override an explicint (or implicit)...