¡Señor respetado!cómo C++ implementa el polimorfismo internamente?
Debo decirle que lo que sé y lo que no sé sobre la pregunta hecha para que pueda abordar el área débil de mi comprensión.
sé que C++ implementa el polimorfismo utilizando el Vtable que es una matriz de punteros cada puntero apunta a la función virtual de la clase, cada clase en la jerarquía tiene un vtable. Ahora supongamos que tengo la siguiente clase
class person
{
char name[20];
public:
person(char* pname)
{
strcpy(name,pname);
}
virtual void show()
{
cout<<"inside person show method, Name: "<<name;
}
};
class teacher:public person
{
int scale;
teacher(char*pname, int s):person(pname)
{
scale=s;
}
void show()
{
cout<<"inside the teacher show method, Scale: "<<scale;
}
};
Supongamos ahora que escribo en el programa principal
person *ptr;
ptr=new teacher(16,"Zia");
ptr->show();
Ahora estoy confundir en este punto, la llamada se dirige a la función de presentación de la clase base, ahora, ya que es una función virtual, por lo que, a su vez, llama a la función apropiada. Sé que estoy equivocado aquí. Estoy confundido de lo que sería la secuencia de llamadas. ¿Cuál es el papel de Vtable y cómo funciona, por favor, elabore.
"Respected Sir"? ¿Seriamente? Debería ser "Señor respetado * s *!" ya que somos muchos ...;) Siempre me pregunto por qué algunos usuarios comienzan con honoríficos, es un poco arcaico. – Spoike
Zia, aprenda la sintaxis de Markdown: http://stackoverflow.com/editing-help – avakar
@Zia ur Rahman: eche un vistazo al qn http://stackoverflow.com/questions/2092283/how-functions-are-resolved compilador por compilación, que explica cuándo el compilador hace una llamada polimórfica y cuándo va a ser una llamada directa. –