2012-09-07 25 views
6
  1. ¿Se usa herencia virtual vTable? Si es sí o no, ¿cómo se implementó
  2. ¿Cómo se comportó la herencia virtual en la memoria?
  3. Cualquier otra alternativa para la herencia virtual

apreciar realmente una explicación conceptual.¿Cómo funciona la herencia virtual?

+0

Implementación definida. – ildjarn

+0

Depende de la implementación, en términos técnicos estrictos es * No especificado *, el estándar de C++ solo describe el comportamiento que la herencia virtual tiene para ofrecer, pero no especifica cómo debe implementarse. Se omite como un detalle para las implementaciones y no son necesarios para especificar este detalle. Habiendo dicho que la mayoría (* leer todos los conocidos *) de los compiladores usan una tabla virtual y un mecanismo de puntero. –

+1

Habiendo dicho lo anterior, no piense que la Q es irrelevante o no es una Q real en absoluto. Todos los compiladores utilizan un mecanismo similar y, aunque no es necesario conocer los detalles de implementación, no está de más saberlo. Además, esta Q se pregunta tantas veces que sería un buen C++ - faq si alguien toma el tiempo y responde convincentemente. –

Respuesta

1

La herencia virtual se implementa de forma diferente según el compilador.

1) Sí, tanto vc como gcc usan el puntero vTable. Pero vc tiene otra referencia de puntero como puntero base virtual.

2) Para una herencia virtual clásica, como Left < Top; Derecha < Superior; < parte inferior izquierda y derecha La pila no debe ser así:

Left.vptr // -> to its vtable 

Left::element_in_left 

Right.vptr 

Right::element_in_right 

Bottom::element_in_bottom 

Top::element_in_top 

programas de uso VPTR encontrar vtable, por gcc, hay una base virtual valor de desplazamiento en viable. vptr + base offset dará la dirección principal.

3) No sé a qué se refiere. Hay diferentes maneras de implementarlo en compiladores de C++. Y otros lenguajes tienen sus formas de enlazar funciones.

+0

¡Muchas gracias! ¡Parece completamente complejo! podría recomendarme algún artículo simple o libro para leer sobre esto. –

+0

@NayanaAdassuriya He leído estos conocimientos en mis publicaciones en el idioma nativo, así que no estoy familiarizado con los libros en inglés. Supongo que podría buscar "herencia virtual de diseño de memoria C++" en google, hay muchas publicaciones excelentes. – halfelf

Cuestiones relacionadas