Cómo implementar la orientación a objetos usando el lenguaje C
La orientación a objetos se puede implementar mediante los siguientes métodos:
1. Encapsulación
La encapsulación consiste en empaquetar datos y métodos en una clase. De hecho, los programadores en lenguaje C ya deberían haber estado expuestos a él. Los objetos de operación de funciones como fopen (), fclose (), fread (), fwrite () en la biblioteca estándar de C son ARCHIVO.
El contenido de los datos es ARCHIVO y las operaciones de lectura y escritura de datos son fread() y fwrite() es análogo al constructor, y fclose() es el destructor.
2. Herencia
La herencia consiste en definir una nueva clase basada en una clase existente, lo que ayuda a reutilizar el código y organizarlo mejor. En lenguaje C, es muy sencillo implementar la herencia única. Simplemente coloque la clase base como el primer miembro de datos de la clase heredada.
Por ejemplo, si queremos crear una clase Rectángulo ahora, solo necesitamos heredar las propiedades y operaciones existentes de la clase Forma, y luego agregar propiedades y operaciones diferentes de Forma a Rectángulo.
3. Polimorfismo C++
El lenguaje implementa el polimorfismo mediante el uso de funciones virtuales. En lenguaje C, también se puede implementar el polimorfismo. Ahora, necesitamos agregar otro círculo y, para expandir la funcionalidad de Shape, necesitamos agregar las funciones area() y draw().
Pero Shape es equivalente a una clase abstracta. No sé cómo calcular su propia área, y mucho menos cómo dibujarla. Además, los métodos de cálculo del área de rectángulos y círculos también son diferentes de los de las imágenes geométricas.
4. Tablas virtuales y punteros virtuales
La tabla virtual (Virtual Table) es una colección de punteros de función para todas las funciones virtuales de esta clase.
El puntero virtual (Virtual Pointer) es un puntero a una tabla virtual. Este puntero virtual debe existir en cada instancia de objeto y será heredado por todas las subclases.
5. Establezca vptr en el constructor.
En cada instancia de objeto, vptr debe inicializarse para que apunte a su vtbl. El mejor lugar para inicializar es el constructor de una clase.
De hecho, en el constructor, el compilador de C++ crea implícitamente un vptr inicializado. En lenguaje C, debemos inicializar vptr explícitamente. Vamos a mostrar cómo inicializar este vptr en el constructor de Shape.