Saltar a contenido

Última actualización:2026-10-12

Implementar el polimorfismo de C++ en lenguaje C

Sobre el autor:

Cuenta pública personal de WeChat:

wechat

1. Ejemplo de implementación en C++

El polimorfismo en C++: en C++ se mantiene una tabla de funciones virtuales y, según las reglas de compatibilidad de asignación, sabemos que un puntero o referencia a la clase padre puede apuntar a objetos de la clase hija.

Si un puntero o referencia a la clase padre llama a una función virtual de la clase padre, ese puntero a la clase padre buscará la dirección de su propia función en su tabla de funciones virtuales; si ese puntero o referencia al objeto de la clase padre apunta a un objeto de la clase hija, y esa clase hija ha sobrescrito la función virtual de la clase padre, entonces el puntero llamará a la función virtual sobrescrita de la clase hija.

Para ver el código del ejemplo de estudio, consulta: c++_examp.cpp

2. Implementación en C

  • Encapsulación

En el lenguaje C no existe el concepto de clase (class), pero sí la estructura (struct), que podemos usar para simularla;

usando punteros a funciones, encapsulamos atributos y métodos dentro de la estructura.

  • Herencia

Anidamiento de estructuras

  • Polimorfismo

Los punteros a funciones de los métodos de la clase y de la subclase son distintos

Dentro de una estructura del lenguaje C no hay funciones miembro; ¿cómo implementar entonces una función compartida por la estructura padre y la estructura hija? Podemos usar punteros a funciones para simularlo. Pero este enfoque tiene un defecto: los punteros a funciones del padre y del hijo no apuntan a algo similar a la tabla de funciones virtuales que mantiene C++, sino a un bloque de memoria física, de modo que si se simulan demasiadas funciones, el mantenimiento se vuelve complicado.

Para simular el polimorfismo, las variables puntero a función deben mantenerse alineadas (completamente coincidentes en contenido y también en la alineación de las variables). De lo contrario, ¡si un puntero a la clase padre apunta a un objeto de la clase hija, el programa se bloqueará en tiempo de ejecución!

Para ver el código del ejemplo de estudio, consulta: c_examp.c

Temas relacionados

Comentarios