¿Qué es una tabla V o una tabla virtual en C ++?

El polimorfismo de tiempo de ejecución en c ++ se logra con funciones virtuales . Para implementar funciones virtuales, C ++ usa una tabla virtual . El compilador lo hace insertando una tabla virtual para cada clase que tiene una función virtual o para una clase que hereda otra clase que tiene una función virtual.

Entonces, ¿qué contiene una tabla virtual? . En palabras simples, la tabla virtual para una clase es una matriz estática que contiene una entrada para cada función virtual que pueden llamar los objetos de esa clase.

Consideremos un ejemplo aquí:

#include
usando el espacio de nombres estándar;
Avión de clase {
público:
GetName virtual vacío () {
cout << "Nombre del avión" << endl;
}
virtual GetType vacío () {
cout << "Tipo de avión" << endl;
}
};

class FighterPlane: Public Airplane {
público:
nulo GetType () {
cout << "Avión de combate" << endl;
}
};

principal(){
Avión a;
a.GetName ();
a.GetType ();
FighterPlane f;
f.GetType ();
f.GetName ();
}

Aquí, hay dos clases: avión y avión de combate. Como la clase Airplane contiene funciones virtuales, el compilador crea una tabla virtual para esa clase y para la clase FighterPlane, ya que hereda una clase que contiene una función virtual.

Se crea un puntero en tiempo de compilación que contiene la dirección de la tabla virtual para cada clase. En el caso de la clase Airplane, la tabla virtual contiene un puntero a las funciones GetName () y GetType ().

entonces la tabla virtual para la clase de Avión puede verse de la siguiente manera:

Avión * a = nuevo Avión ();
a -> GetName ();
a -> GetType ();

Ahora, en el caso de la clase FighterPlane, como esta clase hereda la clase Airplane, también hereda * a. Pero se crea una nueva tabla virtual para esta clase en tiempo de compilación. La clase FighterPlane no tiene implementación para GetName (), pero hereda * a. Entonces, la tabla virtual para la clase FighterPlane puede verse así:

Avión * a = nuevo FighterPlane ();
a -> GetName (); // llama a Airplane GetName ()
a -> GetType (); // llama a FighterPlane GetType ()

Básicamente, podemos decir que la tabla virtual es una matriz de punteros de función que apuntan a funciones virtuales.

Espero eso ayude

Gracias

Referencia: 12.5 – La mesa virtual

La tabla virtual para una clase es una matriz estática que contiene una entrada para cada función virtual a la que pueden llamar los objetos de esa clase. El polimorfismo de tiempo de ejecución es C ++ se logra con la función virtual. Por lo tanto, para implementar el comportamiento en tiempo de ejecución, el compilador de C ++ inserta la tabla virtual para cada clase que tenga una función virtual o una clase heredada de la clase que tiene una función virtual.