Hibák a többszörös öröklésben


Mi a hiba az alábbi példákban?

a)

class A

{

      ...

};

class B

{

      ...

};

class C: public A, public B

{

      ...

};

B*pb= new C; 

A*pa=(A*)pb;

C* pc = (C*)pv;
delete pc;


b)

class A

{

      ...

};

class B

{

      ...

};

class C: public A, public B

{

      ...

};


B*pb= new C; 

void* pv=pb;

C* pc = (C*)pv;

delete pc;



A megoldásért kattints ide!
a)
Többszörös öröklésnél sose végezzünk típuskonverziót keresztbe (v.ö. SzC++Ny 7.4), mert elveszítjük a leszármazott eredeti struktúráját! Csak a C bevonásával tehetjük meg:
A*pa=(A*)(C*)pb;


b)
void* típusra való konverzió esetén is elveszíthetjük a leszármazott struktúrájára vonatkozó információt (v.ö. SzC++Ny 7.4.2). A void* elveszti a B-re vonatkozó információt is, ezért azt a konverziót is meg kell adnunk, hogy a fordító helyesen tolja el a pointereket.
A*pa=(A*)(C*)(B*)pv;



2008.02.06. 20:18:28 |  Permalink  |  Hozzászólások száma: 0  |  Tárgyszavak: Többszörös öröklés


Írja meg Ön is véleményét!


Hozzászólásokat csak regisztrált, bejelentkezett felhasználóktól tudunk elfogadni!

Hozzászólások