Diferencia entre clase y estructura

Diferencia entre clase y estructura

Antes de entender la diferencia entre clase y estructura, debemos conocer algunos conceptos básicos asociados con ellos. Sin una comprensión de los conceptos, es difícil comprender las diferencias entre los dos.

¿Qué es clase y objeto?

Estos son los dos conceptos importantes relacionados con la programación orientada a objetos, y forman la base para enmarcar las funciones y los datos que pasan a otras funciones. Para una mejor comprensión, podemos correlacionarlo con un ejemplo de la vida real. Una clase puede considerarse como una tienda, y un objeto puede ser cualquiera de las tiendas individuales y específicas, como comestibles, papelería, fruta, etc. Todos los objetos comparten las propiedades comunes de la clase principal, la tienda, y, a su vez, los objetos pueden tener sus propias propiedades exclusivas, como un diseño específico, iluminación, etc.  A través de los objetos, en realidad podemos usar la clase; forman las instancias de una clase.

Sintaxis de una clase

Tienda de clases

cosas de cadena pública;

diseño de cadenas públicas;

Sintaxis de un objeto

Tienda de comestibles = nueva tienda ();

Almacenar papelería = nueva tienda ();

Que es una estructura?

Una estructura incluye solo los datos y, por lo tanto, es útil para enmarcar los requisitos de datos individuales a través de los objetos de estructura. A diferencia de una clase, carece de funciones. Aquí está su sintaxis:

struct supermercado_entrance

Char Entrance_Name [50];

int Entrance_Size;

Grocery_entrance;

Todas las tiendas pueden usar la estructura 'entrada' con nombres y tamaños individuales.

Que es la herencia?

Es similar a cómo un hijo hereda las posesiones de su padre y, a su vez, el hijo también puede agregar otras posesiones propias. La clase puede ser una clase base o una clase derivada, en la que la primera se puede tomar como la base para formar la segunda. La clase derivada agrega algunas otras propiedades aparte de lo que obtiene de la clase base. Cuando consideramos el ejemplo anterior, la tienda de comestibles aún se puede derivar a una tienda de comestibles específica, como la tienda de comestibles XYZ.

Ahora que estamos familiarizados con los conceptos básicos, podemos entrar en la diferencia real entre clase y estructura.

¿Cómo difieren??

  • Reutilización: Como las clases forman el marco básico, se pueden reutilizar; Sin embargo, las estructuras son elementos individuales con propiedades específicas, por lo que no se pueden reutilizar. Por ejemplo, la clase de la tienda de comestibles se puede utilizar para cualquier tipo de tienda de comestibles, pero el supermercado_entrance es específico para eso solo y no tiene sentido reutilizarla en otras clases.
  • Visibilidad: Todas las funciones en una clase están disponibles públicamente para sus objetos. Por ejemplo, tenemos una función llamada 'cosas' en la clase 'tienda'. La función 'cosas' es visible para todos sus objetos, como la 'tienda de comestibles,' saperery store ', etc. Dicha visibilidad no es posible con las estructuras, ya que los datos de Struct están restringidos a sí mismos y no son visibles para otras estructuras. Para aclarar las cosas, podemos decir que los datos de 'Grocery_entrance' no son públicamente visibles para todas las demás tiendas.
  • Pase por referencia y pase por valor: Pase por referencia está enviando solo la ubicación de memoria y no los datos reales a las funciones. Esto significa que cada vez que cambia el valor, el cambio se refleja en las funciones correspondientes. Pasar por valor, a su vez, solo está enviando el valor a la función. En este caso, un cambio en el valor después de que se envíe no se reflejará en la función. La clase usa pasar por referencia, y struct usa el valor de pase.
  • Herencia: Las clases pueden ser heredadas para formar subclases, pero las estructuras no pueden utilizar la herencia. Por ejemplo, la tienda de clases ofrece sus funciones a la subclase 'supermercado'. Pero la estructura 'Grocery_entrance' no puede heredar ninguna función. Podemos decir que no hay un concepto como el subestructo aquí.
  • Visibilidad predeterminada: Todos los miembros de una clase se mantienen como entidades privadas por defecto, mientras que los miembros de una estructura se mantienen como entidades públicas por defecto.
  • El tamaño de una clase y estructura vacía: La clase usa un tamaño de 1 byte incluso cuando está vacío, mientras que Struct nunca usa memoria cuando está vacío. Esto significa que podemos decir que el tamaño de una estructura vacía es igual a 0 bytes.
  • Recolección de basura: La recolección de basura es posible con las clases, ya que usan Pass por referencia. Por lo tanto, es más fácil hacer la limpieza en una ubicación donde se almacenan los datos. Por otro lado, la recolección de basura no es posible con Struct, ya que utiliza Pass by Value y los datos están dispersos en diferentes ubicaciones.
  • Gestión de la memoria: Debido a que la clase permite colecciones de basura, la gestión de la memoria también es efectiva; Sin embargo, no es tan efectivo con las estructuras.
  • Constructor: Un constructor generalmente inicializa la clase con ciertos valores especificados. Podemos verlo como algo que se ha inicializado con valores. Si se debe crear una nueva clase, se llama al constructor para asignar memoria para esa instancia. Incluso podemos aprobar valores como argumentos mientras llamamos a un constructor. Vamos a nuestra discusión real ahora. Las clases permiten constructores de todos los tipos, como con o sin argumentos, mientras que las estructuras solo permiten a los constructores con argumentos, i.mi. los constructores parametrizados.
  • Incinerador de basuras: Se llama a un destructor cuando necesitamos eliminar una instancia de una clase. El destructor, a su vez, elimina esa instancia y libera la memoria. Una clase puede usar un destructor, mientras que una estructura no puede.
  • Inicialización de variables de miembros: En las clases, podemos inicializar las variables de los miembros directamente; Tal inicialización no es posible con las estructuras.
  • Creación de objetos: La sintaxis general para la creación de objetos en las clases es:

Demostración obj = nueva demostración ();

Esto significa que debemos usar la palabra clave 'nueva' al crear objetos de una clase. Esto no es necesario al crear objetos de estructuras. Solo eche un vistazo a su sintaxis:

Demostración obj;

Funciona perfectamente incluso sin la palabra clave 'nueva'.

Cuándo usar la clase y cuándo usar struct?

Como las clases son más flexibles para entregar datos y funciones juntas, podemos hacerlo cuando los objetos utilizados son complejos y grandes. En nuestro ejemplo, un centro comercial puede usar la clase 'tienda' para expresar el sistema de una mejor manera. Sin embargo, las estructuras están restringidas a objetos más pequeños, ya que son relativamente menos efectivos que las clases. Por lo tanto, si diseña una tienda propia, las estructuras son la mejor opción.

Cómo convertir una estructura a una clase y viceversa?

Es posible que haya escuchado los términos 'boxeo' y 'unboxing' para convertir una estructura en una clase, y viceversa. Aunque estos son procesos efectivos para ayudarnos en la conversión, deben manejarse con precaución. Como esto afecta directamente las ubicaciones de la memoria, existe un gran impacto en el rendimiento de nuestro sistema. Además, afecta los procesos de recolección de basura y da como resultado la ineficiencia general del sistema. Por lo tanto, use estas conversiones solo cuando sea necesario.

Veamos las diferencias mencionadas anteriormente en forma tabular.

S.No Conceptos Diferencias
Clase Estructura
1 Reutilización Completamente reutilizable No reutilizable
2 Visibilidad Todas las funciones de una clase son visibles para sus objetos Los datos de un objeto de una estructura no son visibles para otros objetos de la misma estructura
3 Pasar por referencia y pasar por valor Usa pase por referencia Usos Pase por valor
4 Herencia Las funciones de una clase pueden ser heredadas por sus subclases; Permite la herencia Nunca permita la herencia
5 Visibilidad predeterminada Todos los miembros de una clase son privados por defecto Todos los miembros de una estructura son públicos por defecto
6 Tamaño cuando está vacío El tamaño de una clase vacía es 1 byte El tamaño de la estructura vacía es 0 bytes
7 Recolección de basura Como utiliza pase por referencia, la recolección de basura es posible Como utiliza Pass by Value, la recolección de basura no es posible
8 Gestión de la memoria La facilidad del proceso de recolección de basura ayuda en la gestión efectiva de la memoria La falta de recolección de basura da como resultado una mala gestión de la memoria
9 Constructores Permite constructores de todos los tipos, como con o sin parámetros Solo permite constructores parametrizados
10 Destructores Puede usarlo No puedo usarlo
11 Inicialización de variables de miembros Permite la inicialización directa de las variables miembros No permite la inicialización directa de las palabras de las variables miembros
12 Creación de objetos Es imprescindible usar la palabra clave 'nueva' durante la creación de objetos Es opcional usar la palabra clave 'nueva' durante la creación de objetos
13 Cuándo usar? Mejor para objetos más grandes y complejos donde se requiere herencia Mejor para objetos más pequeños y simples donde la herencia es de menor importancia.

Casi hemos cubierto todas las diferencias entre clase y estructura, y si siente que falta algo, háganos saber. Aprendamos juntos y aprovechemos al máximo ese conocimiento!