downcasting in c++ I couldnt success

E

eMRe

class Animal {


};

class Dog : public Animal {

};

int main ( )
{
stack<Animal> mystack;
Animal *x = new Dog( );
mystack.push(*x);


Animal y = mystack.top( );

Dog z = ( Dog ) y ; // this line doesnt work, how could I fix it?

return 0;
}
 
K

Kai-Uwe Bux

eMRe said:
class Animal {


};

class Dog : public Animal {

};

int main ( )
{
stack<Animal> mystack;
Animal *x = new Dog( );
mystack.push(*x);

Containers in C++ have value semantics, i.e., the line above only copies the
Animal part of the Dog object. What the stack contains is an honest to God
Animal and no Dog.
Animal y = mystack.top( );

That way, you retrieve the Animal you stored.
Dog z = ( Dog ) y ; // this line doesnt work, how could I fix it?

You should get rid of the C-style cast. But anyway, the line above should
not succeed. The Dog part of the object has been lost when you stored it in
the stack.
return 0;
}


If you need a polymorphic stack, you might try

stack< Animal * >


Technically, if D is derived from T, there are two natural maps:

a) a projection from values of type D to values of type T. This map is
called "slicing".

b) an injection from values of type D* to values of type T*. This map is
what people usually call the is-a-relation. It is important to see that it
holds on the level of pointers (or references, but that does not matter in
the context of containers).


Best

Kai-Uwe Bux
 
J

James Kanze

Containers in C++ have value semantics, i.e., the line above
only copies the Animal part of the Dog object. What the stack
contains is an honest to God Animal and no Dog.
That way, you retrieve the Animal you stored.

He retrieves a copy of the Animal he stored. Not the Animal
itself. Even if mystack had type stack<Dog>, all he'd get is a
copy of the Animal part of the Dog in the stack, because his
variable is of type Animal.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top