Re: Question about objects
R2D2 wrote:
Your top posting has been moved. This will not be posted in comp.lang.c.
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?
I'll take a stab at it, but I suggest that you read the faq and ask a
more specific question.
Also, please don't post your follow up to comp.lang.c. This doesn't
belong there.
Below, Inherited is a child class of Base and inherits from Base.
X<Inherited> is not a child class of X<Base> and does not inherit from
X<Base>
Compare this with Y<Inherited> and Y<Base> below.
class Base {
public:
virtual ~Base() {}
};
class Inherited : public Base {};
template<typename T>
class X {};
template<typename T>
class Y : public Base {}
int main() {
// ok
Inherited i;
Base *pb = &i;
Base &b = i;
X<Inherited> xi;
X<Base> *pxb = ξ // not ok, won't compile
X<Base> &xb = xi; // not ok, won't compile
// ugly, but both Y<Inherited> and Y<Base>
// inherit from Base
// It's just an example.
Y<Inherited> yi;
Y<Base> yb;
Base &pyi = yi;
Base &pyb = yb;
}
LR