Diferencia entre estructura y clase en C++

Suraj P 12 octubre 2023
  1. las palabras clave estructura frente a clase en C++
  2. Modificadores de acceso en clase frente a estructura en C++
  3. Asignación de memoria en clase frente a estructura en C++
  4. Valores nulos en clase frente a estructura en C++
  5. Tipo de valor frente a tipo de referencia en clase frente a estructura en C++
  6. Seguridad en clase frente a estructura en C++
Diferencia entre estructura y clase en C++

Este artículo explica la diferencia entre una estructura y una clase en C++. Este artículo está escrito sobre la última versión de C++; había muchas más restricciones y diferencias entre una estructura y una clase en las versiones anteriores.

En la mayoría de los casos, la estructura es bastante similar a una clase, pero pocas diferencias. Veámoslos uno por uno.

las palabras clave estructura frente a clase en C++

Una estructura se declara usando la palabra clave struct, mientras que la palabra clave class se usa para declarar una clase.

La sintaxis para una clase:

class demo {
 private:
 private
  members...
      .

      public : public members....
};

La sintaxis de una estructura:

struct demo {
  members1;
  members2;
  ...
};

Modificadores de acceso en clase frente a estructura en C++

La clase y la estructura en C++ tienen tres especificadores de acceso público, privado y protegido, pero en C++, los miembros de una estructura son públicos de forma predeterminada y los miembros de una clase son privados por defecto.

Código de ejemplo usando clase:

#include <bits/stdc++.h>
using namespace std;

class demo {
  int temp;
};

int main() {
  demo d;
  d.temp = 20;
}

Salida: Obtenemos un error de compilación porque el temp es privado.

[Error] int demo::temp is private
[Error] within this context

Ejemplo de código usando struct:

#include <bits/stdc++.h>
using namespace std;

struct demo {
  int temp;
};

int main() {
  demo d;
  d.temp = 20;
  cout << d.temp;
}

Producción :

20

Asignación de memoria en clase frente a estructura en C++

Cada vez que se crea e implementa una estructura, la memoria se asigna en el área de “pila”, pero la memoria se asigna en el área de “montón” cuando se crea e implementa una clase.

Valores nulos en clase frente a estructura en C++

Los miembros de la estructura no pueden ser valores nulos, mientras que los miembros de la clase pueden tener valores nulos.

Tipo de valor frente a tipo de referencia en clase frente a estructura en C++

En C++, las estructuras son un tipo de valor y las clases son un tipo de referencia. Los tipos de valor almacenan su contenido en una pila y guardan directamente el valor donde se declaran, por lo que cada vez que se crea una variable de estructura, la variable contiene directamente los datos de la estructura.

Pero en el caso de una clase de tipo de referencia, cada vez que se crea un objeto, contiene la referencia a él en lugar de los datos.

Seguridad en clase frente a estructura en C++

La seguridad es un problema importante con las estructuras porque no podemos ocultar los detalles de implementación de los usuarios finales, pero los detalles de diseño se pueden ocultar fácilmente en la implementación de la clase.

Resumamos las diferencias en forma tabular.

Estructura Clase
Utilice la palabra clave struct para definir una estructura. Utilice la palabra clave clase para definir una clase.
Menos seguro. Más seguro ya que las implementaciones pueden ocultarse al usuario final.
La memoria se asigna en el área de pila. La memoria se asigna en el área heap.
Los miembros no pueden tener valores nulos. Los miembros pueden tener valores nulos.
El modificador de acceso es público por defecto. El modificador de acceso es privado por defecto.
La estructura es un tipo de valor. La clase es un tipo de referencia.
Autor: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub

Artículo relacionado - C++ Class