Considere el siguiente fragmento de código: -C-Style conversión hacia arriba y abatido que implica la herencia privada
class A {};
class B : private A {};
B* bPtr1 = new B;
// A* aPtr1 = bPtr1; // error
// A* aPtr2 = static_cast<A*>(bPtr1); // error
A* aPtr3 = (A*)bPtr1;
B* bPtr2 = (B*)aPtr3;
La conversión de estilo C descarta la herencia privada mientras que tanto el implícito y static_cast
fallan (también dynamic_cast
). Por qué ? Si los moldes de estilo C solo están jugando un poco, ¿cómo se implementan los moldes de C++, es decir, cómo saben el tipo de herencia de la huella de memoria?
Después de que bPtr1 se transfiera a aPtr3, tendré que usar otro modelo C para bajar a B ya que de nuevo fallaron static_cast
y dynamic_cast
. Entonces, ¿está garantizado que bPtr2 sea bueno?
Gracias de antemano
q relacionado (con una respuesta mejor): http://stackoverflow.com/questions/844816/c-style-upcast-and-downcast-involving-private-inheritance?rq=1 –