Re: Determining class of an object
Fred wrote:
Is there a way to determine the class of an object?
For instance, if I have an array of Animal instances, how do I extract
the items that are of subclass type Dog?
Java has the "instanceof" operator, but is there any way in C++ to
do this without each class having an instance variable with some
kind of unique identifier for the class (this would be OK for classes
that I create, but doesn't scale to third-party classses).
Ian's advice is fine. I'd like to add my 2 cents to it. There is no
mechanism in C++ that would allow you to utilize the information you can
obtain from 'typeof' operator beyond comparing it with some other. You
can't automagically create instance of that type, you can't interrogate
the 'type_info' object like you could do that in Java. So, don't get
your hopes up.
An array of Animal objects cannot contain any Dogs. It will contain
subobjects of type Animal from any Dog you can try inserting in the
array (see "slicing"). So, attempt to determine the type will most
likely give you 'Animal' (for the array of Animal objects). You can try
to create an array of *pointers* to Animal objects, that's different,
and then you could ask what the "real" type of the object behind the
pointer is. But beware that in C++ the need to know what the "real"
type is behind a pointer to a base class is a sign of a BAD DESIGN(tm).
If you have a base class, and you put [pointers to] objects in some
collection, the idea is most likely to use polymorphism to invoke its
object's behaviour without having to determine the exact type of the
object. Reag about polymorphism.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask