Re: c++ casting issues
foothompson@yahoo.com wrote:
I have a few questions regarding casting in C++.
let's take as an example:
class A
{
virtual foo();
};
class B
{
virtual bar();
};
class C: public A, public B
{
};
Is it ok to convert a Derived Class instance to a void * and back to
a base class?
Why do you call it "back to a base class"? Why "back"?
For e.g. is it ok to perform the following sequence of steps?
C* c = new C();
void* p = static_cast<void *>(c);
B* b = static_cast<B*>(p);
If not, what is the proper sequence of steps needed to convert a
derived instance to a void * and then back to a base class?
The 'void*' needs to be converted back to the exact type it was obtained
from, i.e. the derived class, and then the pointer to derived converts
to a pointer to base implicitly.
Also, is it ok to compare pointers of a derived class and a base class
for equality? i.e is the following function guaranteed to work?
bool IsEqual(B* b, C* c)
{
return (b == c);
}
Not sure what you mean by "guaranteed to work" here. You don't show
how you would _call_ that function. Generally speaking, to be compaerd
two pointers have to point to the same type. There is an implicit
conversion of a ponter to derived to a pointer to base class. So, if
'C' derives from 'B', then 'c' will be converted to 'B*', and then the
two pointers will be compared.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask